本文介绍了eureka和ribbon,feign的简单使用教程。
一、配置服务注册中心:
1、Eureka是Netflix开发的服务注册中心,使用eureka作为服务发现中心,需要单独启动一个spring boot服务作为服务发现中心,该服务需要引入eureka的服务端依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、然后在spring boot的启动类上面加上注解@EnableEurekaServer;
3、最后在配置文件Application.yml中配置eureka
eureka:
instance:
hostname: localhost #实例的主机名称
client:
registerWithEureka: false #本身就是服务器,所以无需注册到服务器
fetchRegistry: false #无需获取服务器的注册信息
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:server.port/eureka/ #指定服务注册中心地址
spring:
application:
name: eureka-server
二、使用服务发现客户端注册微服务
1、引入服务发现中心客户端依赖
<dependency>
<groupId>org.springframework.cloud</goupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</aritfactId>
</dependency>
2、在spring boot的启动类上面加上注解@EnableEurekaClient
3、配置文件中配置服务名和服务发现中心的地址
spring:
application:
name: product-data-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #对应服务发现中心中的配置
三、使用客户端负载均衡调用服务实例
springcloud提供了两种方式访问服务实例:一种是Ribbon,另一种是Feign;Ribbon使用RestTemplate调用,并进行客户端负载均衡。Feign是对Ribbon的封装。
(1)、Ribbon实现负载均衡调用微服务
1、需要在启动类上增加一个@EnableDiscoveryClient,表示启动服务发现客户端,该注解用于从服务发现中心发现服务,而@EnableEurekaClient表示将该服务注册到服务发现中心
2、可以直接使用Ribbon提供的LoadBalancerClinet实现负载均衡获得一个可用的服务实例,或者在注入RestTemplate类的时候使用@LoadBalanced注解开启负载均衡。
①@Autowired LoadBalancerClient loadBalancerClient;
ServiceInstance serviceInstance =ladBalancerClient.choose("服务实例名");
String uri = serviceInstance.getUri().toString;
restTemplate.getForObject(uri+"/...",String.class);
②:
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate;
}
(2)、Feign实现负载均衡调用微服务
1、使用引入openfeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、启动类上添加@EnableFeignClients
3、创建FeignClient
@FeignClient(value="注册到服务发现中心的服务名")
public interface ProductClientFeign{
@GetMapping("/products")
public List<Product> listProducts();
}
4、Feign使用动态代理的方式创建相应接口的实现类并注入到spring容器中,所以使用的时候只需要自动注入,然后调用接口方法就可以了。
@Autowired
ProductClientFeign productClientFeign;
List<Product> products = productClientFeign.listProducts();
本文暂时没有评论,来添加一个吧(●'◡'●)