一:Eureka
一:单机环境搭建
略
二:高可用环境搭建
一:描述
Eureka Server 高可用环境需要部署两个Eureka server,它们互相向对方注册。如果在本机启动两个Eureka需要 注意两个Eureka Server的端口要设置不一样,这里我们部署一个Eureka Server工程,将端口可配置,制作两个 Eureka Server启动脚本,启动不同的端口,如下图

1、在实际使用时Eureka Server至少部署两台服务器,实现高可用。
2、两台Eureka Server互相注册。
3、微服务需要连接两台Eureka Server注册,当其中一台Eureka死掉也不会影响服务的注册与发现。
4、微服务会定时向Eureka server发送心跳,报告自己的状态。
5、微服务从注册中心获取服务地址以RESTful方式发起远程调用。
二:导入依赖
<!-- 导入Eureka服务的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
三:Spring Boot 配置文件
server:
port: ${PORT:50101} #服务端口
spring:
application:
name: xc‐govern‐center #指定服务名
eureka:
client:
registerWithEureka: true #服务注册,是否将自己注册到Eureka服务中
fetchRegistry: true #服务发现,是否从Eureka中获取注册信息
serviceUrl: #Eureka客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果不配置则默认本机8761端口)
defaultZone: ${EUREKA_SERVER:http://eureka02:50102/eureka/}
server:
enable‐self‐preservation: false #是否开启自我保护模式
eviction‐interval‐timer‐in‐ms: 60000 #服务注册表清理间隔(单位毫秒,默认是60*1000)
instance:
hostname: ${EUREKA_DOMAIN:eureka01}
四:启动脚本


五:服务注册
一:导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
二:Spring Boot 配置文件
eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/,http://localhost:50102/eureka/}
instance:
prefer‐ip‐address: true #将自己的ip地址注册到Eureka服务中
ip‐address: ${IP_ADDRESS:127.0.0.1}
instance‐id: ${spring.application.name}:${server.port} #指定实例id
三:添加注解
在启动类上添加 @EnableDiscoveryClient 注解,表示它是一个Eureka的客户端
二:Ribbon
Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡。Java中远程调用的技术有很多,如: webservice、socket、rmi、Apache HttpClient、OkHttp等,互联网项目使用基于http的客户端较多,本项目使用OkHttp。
一:导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
二:Spring Boot配置文件
ribbon:
MaxAutoRetries: 2 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试
MaxAutoRetriesNextServer: 3 #切换实例的重试次数
OkToRetryOnAllOperations: false #对所有操作请求都进行重试,如果是get则可以,如果是post,put等操作没有实现幂等的情况下是很危险的,所以设置为false
ConnectTimeout: 5000 #请求连接的超时时间
ReadTimeout: 6000 #请求处理的超时时间
三:负载均衡测试
一:添加启动脚本
先将配置文件中的端口改成port: ${PORT:31001}


二:启动类代码
@Bean
@LoadBalanced //开启客户端负载均衡
public RestTemplate restTemplate(){
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
三:测试类代码
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestRibbon {
@Autowired
private RestTemplate restTemplate;
@Test
public void testRibbon(){
String serverId="XC-SERVICE-MANAGE-CMS";
ResponseEntity<Map> forEntity = restTemplate.getForEntity("http://" + serverId + "/cms/page/get/5a754adf6abb500ad05688d9", Map.class);
Map body = forEntity.getBody();
System.out.println(body);
}
}
四:负载均衡测试
添加@LoadBalanced注解后,restTemplate会走LoadBalancerInterceptor拦截器,此拦截器中会通过 RibbonLoadBalancerClient查询服务地址,可以在此类打断点观察每次调用的服务地址和端口,两个cms服务会轮流被调用。

三:Feign
Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。
一:导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
二: 定义FeignClient接口
@FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS)
public interface CmsPageClient {
/**
* 远程调用cmsPage 查询
* @author : yechaoze
* @date : 2019/6/24 14:10
* @param id :
* @return : com.xuecheng.framework.domain.cms.CmsPage
*/
@GetMapping("/cms/page/get/{id}")//标识远程调用类型
public CmsPage findCmsPageById(@PathVariable("id") String id);
}
三: 启动类添加@EnableFeignClients注解
四:测试代码
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestFeign {
@Autowired
private CmsPageClient cmsPageClient;
@Test
public void testFeign(){
//通过服务id调用cms的查询页面接口
CmsPage cmsPage = cmsPageClient.findCmsPageById("5a754adf6abb500ad05688d9");
System.out.println(cmsPage);
}
}
五:工作原理
1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理对象
2、 @FeignClient(value = XcServiceList.XC_SERVICE_MANAGE_CMS)即指定了cms的服务名称,Feign会从注册中 心获取cms服务列表,并通过负载均衡算法进行服务调用。
3、在接口方法 中使用注解@GetMapping("/cms/page/get/{id}"),指定调用的url,Feign将根据url进行远程调用。
六:注意点
1、feignClient接口有参数在参数必须加@PathVariable("XXX")和@RequestParam("XXX") 。
2、feignClient返回值为复杂对象时其类型必须有无参构造函数。
Comments | NOTHING