02 Spring Cloud Netflix Eureka实现服务注册与…
2020-03-01 16:03:09来源:博客园 阅读 ()
02 Spring Cloud Netflix Eureka实现服务注册与发现
Spring Cloud官网: https://spring.io/projects/spring-cloud
本篇主要讲Spring Cloud Netflix中的Eureka,参考内容如下
- Spring Cloud Netflix 2.2.1.RELEASE参考文档
- Spring Cloud 系列之 Eureka 实现服务注册与发现
文章内容会尽量参考官方文档。
1 注册中心(Eureka Server)
完整代码地址:https://github.com/sxpujs/spring-cloud-examples/tree/master/netflix/netflix-eureka-server
1 maven依赖增加 netflix-eureka-server
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2 配置文件 application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3 Application启动类,增加@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class NetflixEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(NetflixEurekaServerApplication.class, args);
}
}
4 启动服务,在浏览器打开如下地址:http://localhost:8761/,页面如下:
2 创建服务提供者
完整代码参考:https://github.com/sxpujs/spring-cloud-examples/tree/master/netflix/netflix-eureka-client-provider
1 maven依赖增加 netflix-eureka-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2 配置application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: provider ## 应用程序名称,后面会在消费者中用到
server:
port: 8000
3 Application启动类与hello接口
@SpringBootApplication
@RestController
@Slf4j
public class NetflixEurekaClientProviderApplication {
@RequestMapping("/")
public String home() {
return "Hello world";
}
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value = "/hello")
public String hello(){
List<String> services = discoveryClient.getServices();
for(String s : services){
log.info(s);
}
return "hello spring cloud!";
}
public static void main(String[] args) {
SpringApplication.run(NetflixEurekaClientProviderApplication.class, args);
}
}
4 启动项目,正常情况下就注册到了 Eureka 注册中心,打开 Eureka 控制台,会看到已经出现了这个服务。
curl localhost:8000/hello
结果: hello spring cloud!
3 创建服务消费者
完整代码参考:https://github.com/sxpujs/spring-cloud-examples/tree/master/netflix/netflix-eureka-client-consumer
1 maven依赖增加 netflix-eureka-client, spring-cloud-starter-openfeign等
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2 配置application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: consumer ## 应用程序名称
server:
port: 9000
3 Application启动类
@SpringBootApplication
@RestController
@EnableEurekaClient
@EnableFeignClients
public class NetflixEurekaClientConsumerApplication {
/**
* 注入 RestTemplate
* 并用 @LoadBalanced 注解,用负载均衡策略请求服务提供者
* 这是 Spring Ribbon 的提供的能力
* @return
*/
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
SpringApplication.run(NetflixEurekaClientConsumerApplication.class, args);
}
}
4 创建一个服务接口类,这是 Feign 的使用方式,详细的用法可以查一下 Spring Cloud Feign 相关文档
/**
* IHelloService
* 配置服务提供者:provider 是服务提供者的 application.name
*/
@FeignClient("provider")
public interface IHelloService {
@RequestMapping(value = "/hello")
String hello();
}
5 创建一个 Controller 用于调用服务
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private IHelloService helloService;
private static final String applicationName = "provider";
@RequestMapping(value = "commonRequest")
public Object commonRequest(){
String url = "http://"+ applicationName +"/hello";
return restTemplate.getForObject(url,String.class);
}
@RequestMapping(value = "feignRequest")
public Object feignRequest(){
return helloService.hello();
}
}
其中 feignRequest 方法是使用了 Feign 的方式调用服务接口;
commonRequest 方法是用 RestTemplate 提供的方法调用服务接口;
6 启动服务,测试接口。
curl localhost:9000/commonRequest
结果: hello spring cloud!
curl localhost:9000/feignRequest
结果: hello spring cloud!
原文链接:https://www.cnblogs.com/sxpujs/p/12389552.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash