Eureka 服务注册中心

tech2022-07-16  149

文章目录

Eureka-server集群Eureka-服务提供者集群消费者测试

Eureka-server集群

启动类添加注解 @EnableEurekaServer 依赖:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>

配置注册中心相互注册 7001端口application.yml

server: port: 7001 eureka: instance: hostname: eurekaTest1 #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://eurekaTest2:7002/eureka/ #server: #关闭自我保护机制,保证不可用服务被及时踢除 #enable-self-preservation: false #eviction-interval-timer-in-ms: 2000

7002端口application.yml

server: port: 7002 eureka: instance: hostname: eurekaTest2 #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://eurekaTest1:7001/eureka/ #server: #关闭自我保护机制,保证不可用服务被及时踢除 #enable-self-preservation: false #eviction-interval-timer-in-ms: 2000

hosts文件

127.0.0.1 eurekaTest1 127.0.0.1 eurekaTest2

Eureka-服务提供者集群

两个端口的application.yml配置类似。spring.application.name一样

... spring: application: name: Payment-Service ... eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eurekaTest1:7001/eureka/,http://eurekaTest2:7002/eureka/ instance: instance-id: payment8002 #访问路径可以显示IP地址 prefer-ip-address: true #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒) # lease-renewal-interval-in-seconds: 1 # #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务 # lease-expiration-duration-in-seconds: 2

消费者

application.yml与提供者配置类似。 Controller

@RestController @Slf4j public class ConsumerController { //即服务提供者的spring.application.name,改成全部大写,不能包含_ private final String PAYMENT_URL="http://PAYMENT-SERVICE"; @Autowired RestTemplate restTemplate; @GetMapping("/consumer/payment/create") public CommonResult<Payment> create(Payment payment){ log.info(payment+"=========================================="); return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class); } @GetMapping("/consumer/payment/get/{id}") public CommonResult<Payment> get(@PathVariable("id")Long id){ log.info(+id+"=========================================="); return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class); } }

使用RestTemplate时,添加@LoadBalanced注解实现负载均衡。

测试

最新回复(0)