目录
1.Eureka集群构建
1.1Eureka集群原理说明
解决办法: 搭建Eureka注册中心集群,实现负载均衡+故障容错
1.2Eureka集群环境构建
(1)新建一个eureka,端口号7002
(2)修改hosts文件
加入
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
(3)配置2个eureka的yml
以前单机版:
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服务端的实例名字
client:
register-with-eureka: false #表识不向注册中心注册自己
fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
现在集群模式:
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名字
client:
register-with-eureka: false #表识不向注册中心注册自己
fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://eureka7002.com:7002/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #eureka服务端的实例名字
client:
register-with-eureka: false #表识不向注册中心注册自己
fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://eureka7001.com:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
(4)启动2个eureka
互相注册,相互守望
配置hosts之后,也可以直接访问http://eureka7001.com:7001/
配置hosts之后,也可以直接访问http://eureka7002.com:7002/,效果相同
1.3将支付和订单微服务注册到eureka集群
微服务单机版时的yml
eureka:
client:
register-with-eureka: true #是否将自己注册到注册中心,默认true
fetchRegistry: true #是否从注册中心抓取已有的注册信息,默认true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
service-url:
defaultZone: http://localhost:7001/eureka #单机版
现在集群情况下的yml
eureka:
client:
register-with-eureka: true #是否将自己注册到注册中心,默认true
fetchRegistry: true #是否从注册中心抓取已有的注册信息,默认true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
service-url:
#defaultZone: http://localhost:7001/eureka #单机版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
1.4测试
先启动2个eureka,在启动支付和订单微服务
测试,访问成功!
2.支付模块集群配置
2.1新建1个支付微服务端口号8002
(1)粘pom,粘yml改端口。
(2)修改2个payment的controller
加上端口号,方便测试
@Resource
private PaymentService paymentService;
@Value("${server.port}")
private String serverport;
@PostMapping(value = "/payment/create")
public CommonResult creat(@RequestBody Payment payment){
int result = paymentService.create(payment);
log.info("*******插入结果:"+result);
if(result>0){
return new CommonResult(200,"插入数据库成功"+serverport,result);
}else{
return new CommonResult(444,"插入数据失败");
}
}
(3)启动,查看注册中心
(4)测试
测试成功。
2.2修改Controller
访问地址不能写死
并在调用时添加端口,方便验证
@RestController
@Slf4j
public class OrderController {
//public static final String PAYMENT_URL="http://localhost:8001";//单机版
public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";//集群版,写成服务名称
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create")
public CommonResult<Payment> create(Payment payment){
return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
}
@GetMapping("/consumer/payment/get/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
}
}
2.3 开启负载均衡
2.4测试
订单调用支付时,轮询访问2个支付微服务
Eureka集群搭建成功,支付服务集群环境部署成功!!