Spring Cloud:Eureka集群
一.两台Eureka
修改host文件:
127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com
分别配置两台Eureka的yml
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服务端的实例名称 client: #false表示不向注册中心注册自己 register-with-eureka: false #false表示自己就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 fetch-registry: false service-url: #设置eureka server交互的地址查询服务和注册服务都需要依赖这个地址 defaultZone: http://eureka7002.com:7002/eureka server: port: 7002 eureka: instance: hostname: eureka7002.com #eureka服务端的实例名称 client: #false表示不向注册中心注册自己 register-with-eureka: false #false表示自己就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 fetch-registry: false service-url: #设置eureka server交互的地址查询服务和注册服务都需要依赖这个地址 defaultZone: http://eureka7001.com:7001/eureka
访问:两台Eureka分别可以访问非自己本身的Eureka
二.服务注册进Eureka集群
yml配置:
server: port: 8001 spring: application: name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 1234 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.wj.springcloud.entities eureka: client: #是否将自己注册到Eureka Server 默认为true register-with-eureka: true #是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置true才能配合ribbon做负载均衡 fetch-registry: true service-url: #设置eureka server交互的地址查询服务和注册服务都需要依赖这个地址 #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
服务启动,显示已经注册
服务8002的集群配置:
server: port: 8002 eureka: client: #是否将自己注册到Eureka Server 默认为true register-with-eureka: true #是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置true才能配合ribbon做负载均衡 fetch-registry: true service-url: #设置eureka server交互的地址查询服务和注册服务都需要依赖这个地址 #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
消费者:
RestTemplate配置:
在Spring Cloud
微服务应用体系中,远程调用都应负载均衡。我们在使用RestTemplate
作为远程调用客户端的时候,开启负载均衡极其简单:一个@LoadBalanced
注解就搞定了
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
controller调用
@Slf4j
@RestController
public class OrderController {
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);
}
}
拓扑图: