赞
踩
目录
1.4主启动添加@EnableEurekaServer启动服务
3.4主启动类添加@EnableEurekaClient注解
4.4主启动类添加@EnableEurekaClient注解
在父项目上新建一个子模块springcloud-eureka1,端口为9110
父项目版本详见:https://blog.csdn.net/bfss_11/article/details/119056522
涉及文件:
组件版本已在父项目中统一管理,子模块中只需要引入对应依赖即可
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- <exclusions>
- <exclusion>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- spring:
- application:
- name: springcloud-eureka1
-
- eureka:
- instance:
- hostname: localhost #eureka服务端实例名称
- client:
- register-with-eureka: false #false不向注册中心注册自己
- fetch-registry: false #false本身为注册中心,不需要向注册中心拉取服务
- service-url:
- defaultZone: http://localhost:9110/eureka/
- server:
- eviction-interval-timer-in-ms: 5000
-
- server:
- port: 9110

访问:http://localhost:9110,出现如下内容即服务启动成功
hosts文件位于:C:\Windows\System32\drivers\etc
- 127.0.0.1 test1
- 127.0.0.1 test2
新建子模块springcloud-eureka2,端口为9120
建立步骤与上面创建springcloud-eureka1服务相同
springcloud-eureka1
- spring:
- application:
- name: springcloud-eureka1
-
- eureka:
- instance:
- #修改部分。eureka服务端实例名称。和hosts中映射名相同
- hostname: test1
- client:
- register-with-eureka: false
- fetch-registry: false
- service-url:
- #修改部分。向另一台eureka服务注册
- defaultZone: http://test2:9120/eureka/
- server:
- eviction-interval-timer-in-ms: 5000
-
- server:
- port: 9110

springcloud-eureka2
- spring:
- application:
- name: springcloud-eureka2
-
- eureka:
- instance:
- #修改部分。eureka服务端实例名称。和hosts中映射名相同
- hostname: test2
- client:
- register-with-eureka: false
- fetch-registry: false
- service-url:
- #修改部分。向另一台eureka服务注册
- defaultZone: http://test1:9110/eureka/
- server:
- eviction-interval-timer-in-ms: 5000
-
- server:
- port: 9120

微服务向eureka集群注册服务时,需要同时向集群中所有eureka注册。即配置eureka.service-url时
- service-url:
- defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/
springcloud-common1、springcloud-common2、springcloud-common3,端口分别为9210、9220、9230
以springcloud-common1为例,涉及文件为:
生产者需要向eureka注册中心注册,添加客户端依赖(版本在父项目中定义)
pom.xml
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- <exclusions>
- <exclusion>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
applicaton.yml
- spring:
- profiles:
- active:
- - one
- application:
- name: springcloud-common #多个服务应用名相同
-
- eureka:
- instance:
- instance-id: springcloud-common1 #向eureka中注册的实例名不同
- appname: ${spring.application.name}
- prefer-ip-address: true
- lease-renewal-interval-in-seconds: 5
- lease-expiration-duration-in-seconds: 5
- client:
- service-url:
- #同时向eureka集群中的所有服务注册
- defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/

application profiles文件中定义三个服务的端口号。分别为one=9210,two=9220,three=9230
application-one.properties
server.port=9210
application-two.properties
server.port=9220
application-three.properties
server.port=9230
返回端口号,便于负载均衡时知道调用了哪一个服务实例
- package com.zy.controller;
-
- import java.util.Map;
-
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.CrossOrigin;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @CrossOrigin
- @RestController
- @RequestMapping("/com")
- public class CommonController {
-
- @Value("${server.port}")
- private Integer port;
-
- @RequestMapping("/get")
- public Map<String, Object> get(@RequestBody Map<String, Object> parm) {
- parm.put("port", port);
- System.out.println(parm);
- return parm;
- }
-
- }

新建springcloud-comsumer1项目,端口号为9310
涉及文件
pom.xml添加eureka客户端依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- <exclusions>
- <exclusion>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
application.yml
- spring:
- application:
- name: springcloud-consumer
-
- server:
- port: 9310
-
- eureka:
- instance:
- instance-id: springcloud-consumer1
- appname: ${spring.application.name}
- prefer-ip-address: true
- lease-renewal-interval-in-seconds: 5
- lease-expiration-duration-in-seconds: 5
- client:
- service-url:
- #同时向集群中的所有eureka服务注册
- defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/
-

在resttemplate上添加@LoadBalanced。使用服务名调用
- package com.zy.config;
-
- import org.springframework.cloud.client.loadbalancer.LoadBalanced;
- import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.client.RestTemplate;
-
- @Configuration
- @LoadBalancerClient(value="SPRINGCLOUD-COMMON")
- public class RestTemplateConfiguration {
-
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
-
-
- }

通过resttemplate访问服务提供者springcloud-common的接口
- package com.zy.controller;
-
- import java.util.Map;
-
- import org.apache.commons.collections4.MapUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.annotation.CrossOrigin;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- @CrossOrigin
- @RestController
- @RequestMapping("/consumer")
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public class ConsumerController {
-
- @Autowired
- private RestTemplate restTemplate;
-
- private static String port = null;
-
- @RequestMapping("/get")
- public Object get(@RequestBody Map<String, Object> parm) {
- ResponseEntity<Map> postForEntity = restTemplate.postForEntity("http://SPRINGCLOUD-COMMON/com/get", parm,
- Map.class);
- Map<String, Object> body = postForEntity.getBody();
- System.out.println(body);
- String rstPort = MapUtils.getString(body, "port");
- if (StringUtils.equals(port, rstPort)) {
- System.err.println("相同:" + port + " ,rstPort:" + rstPort);
- }
- port = rstPort;
- return body;
- }
-
- }

启动两个eureka服务,三个服务提供者(springcloud-common),服务消费者spirngcloud-consumer1
访问eureka服务,发现生产者、消费者均已注册成功
postman请求消费者接口,成功获取到服务提供者返回的信息,9210说明是调用了springcloud-common1服务
服务上下线监控
EurekaInstanceCanceledEvent 服务下线事件。 EurekaInstanceRegisteredEvent 服务注册事件。 EurekaInstanceRenewedEvent 服务续约事件。 EurekaRegistryAvailableEvent Eureka 注册中心启动事件。 EurekaServerStartedEvent Eureka Server 启动事件。 |
- package com.zy.eureka;
-
- import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent;
- import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRegisteredEvent;
- import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRenewedEvent;
- import org.springframework.cloud.netflix.eureka.server.event.EurekaRegistryAvailableEvent;
- import org.springframework.cloud.netflix.eureka.server.event.EurekaServerStartedEvent;
- import org.springframework.context.event.EventListener;
- import com.netflix.appinfo.InstanceInfo;
-
- //@Component
- public class EurekaStatusChangeListener {
-
- @EventListener
- public void listen(EurekaInstanceCanceledEvent event) {
- String serverId = event.getServerId();
- System.err.println(serverId + ":" + event.getAppName() + "服务下线");
- }
-
- @EventListener
- public void listen(EurekaInstanceRegisteredEvent event) {
- InstanceInfo instanceInfo = event.getInstanceInfo();
- String instanceId = instanceInfo.getInstanceId();
- System.err.println(instanceId + ":" + instanceInfo.getAppName() + "服务注册");
- }
-
- @EventListener
- public void listen(EurekaServerStartedEvent event) {
- Object source = event.getSource();
- System.err.println(source + "\r\n服务启动");
- }
-
- @EventListener
- public void listen(EurekaInstanceRenewedEvent event) {
- InstanceInfo instanceInfo = event.getInstanceInfo();
- String instanceId = instanceInfo.getInstanceId();
- System.err.println(instanceId + ":" + instanceInfo.getAppName() + "服务Renewed");
- }
-
-
- @EventListener
- public void listen(EurekaRegistryAvailableEvent event) {
- Object source = event.getSource();
- System.err.println(source + "\r\n服务Available");
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。