当前位置:   article > 正文

springcloud入门基础搭建之eureka_spring eureka 教程

spring eureka 教程

目录

1.eureka注册中心

1.1创建springcloud-eureka1项目

1.2引入依赖eureka-server

1.3配置文件

1.4主启动添加@EnableEurekaServer启动服务

 1.5访问eureka注册中心

 2.eureka集群搭建

2.1修改hosts文件

2.2新建第二个eureka服务

2.3修改配置文件

2.4微服务向eureka注册中心注册服务

3.生产者

3.1创建3个生产者项目

3.2添加依赖

3.3配置文件

3.4主启动类添加@EnableEurekaClient注解

3.5编写controller

4.消费者

4.1新建子模块

4.2添加依赖

4.3配置文件

4.4主启动类添加@EnableEurekaClient注解

 4.5配置restTemplate

4.6编写controller

 4.6启动服务

5.扩展使用

传送门


1.eureka注册中心

1.1创建springcloud-eureka1项目

        在父项目上新建一个子模块springcloud-eureka1,端口为9110

        父项目版本详见:https://blog.csdn.net/bfss_11/article/details/119056522

        涉及文件:

1.2引入依赖eureka-server

        组件版本已在父项目中统一管理,子模块中只需要引入对应依赖即可

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>javax.servlet</groupId>
  7. <artifactId>servlet-api</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>

1.3配置文件

       

  1. spring:
  2. application:
  3. name: springcloud-eureka1
  4. eureka:
  5. instance:
  6. hostname: localhost #eureka服务端实例名称
  7. client:
  8. register-with-eureka: false #false不向注册中心注册自己
  9. fetch-registry: false #false本身为注册中心,不需要向注册中心拉取服务
  10. service-url:
  11. defaultZone: http://localhost:9110/eureka/
  12. server:
  13. eviction-interval-timer-in-ms: 5000
  14. server:
  15. port: 9110

1.4主启动添加@EnableEurekaServer启动服务

 1.5访问eureka注册中心

        访问:http://localhost:9110,出现如下内容即服务启动成功

 2.eureka集群搭建

2.1修改hosts文件

        hosts文件位于:C:\Windows\System32\drivers\etc

  1. 127.0.0.1 test1
  2. 127.0.0.1 test2

2.2新建第二个eureka服务

        新建子模块springcloud-eureka2,端口为9120

        建立步骤与上面创建springcloud-eureka1服务相同

2.3修改配置文件

        springcloud-eureka1

  1. spring:
  2. application:
  3. name: springcloud-eureka1
  4. eureka:
  5. instance:
  6. #修改部分。eureka服务端实例名称。和hosts中映射名相同
  7. hostname: test1
  8. client:
  9. register-with-eureka: false
  10. fetch-registry: false
  11. service-url:
  12. #修改部分。向另一台eureka服务注册
  13. defaultZone: http://test2:9120/eureka/
  14. server:
  15. eviction-interval-timer-in-ms: 5000
  16. server:
  17. port: 9110

springcloud-eureka2

  1. spring:
  2. application:
  3. name: springcloud-eureka2
  4. eureka:
  5. instance:
  6. #修改部分。eureka服务端实例名称。和hosts中映射名相同
  7. hostname: test2
  8. client:
  9. register-with-eureka: false
  10. fetch-registry: false
  11. service-url:
  12. #修改部分。向另一台eureka服务注册
  13. defaultZone: http://test1:9110/eureka/
  14. server:
  15. eviction-interval-timer-in-ms: 5000
  16. server:
  17. port: 9120

2.4微服务向eureka注册中心注册服务

        微服务向eureka集群注册服务时,需要同时向集群中所有eureka注册。即配置eureka.service-url时

  1. service-url:
  2. defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/

3.生产者

3.1创建3个生产者项目

        springcloud-common1、springcloud-common2、springcloud-common3,端口分别为9210、9220、9230

以springcloud-common1为例,涉及文件为:

3.2添加依赖

        生产者需要向eureka注册中心注册,添加客户端依赖(版本在父项目中定义)

        pom.xml

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>javax.servlet</groupId>
  7. <artifactId>servlet-api</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>

3.3配置文件

applicaton.yml

  1. spring:
  2. profiles:
  3. active:
  4. - one
  5. application:
  6. name: springcloud-common #多个服务应用名相同
  7. eureka:
  8. instance:
  9. instance-id: springcloud-common1 #向eureka中注册的实例名不同
  10. appname: ${spring.application.name}
  11. prefer-ip-address: true
  12. lease-renewal-interval-in-seconds: 5
  13. lease-expiration-duration-in-seconds: 5
  14. client:
  15. service-url:
  16. #同时向eureka集群中的所有服务注册
  17. 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

3.4主启动类添加@EnableEurekaClient注解

3.5编写controller

        返回端口号,便于负载均衡时知道调用了哪一个服务实例

  1. package com.zy.controller;
  2. import java.util.Map;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.web.bind.annotation.CrossOrigin;
  5. import org.springframework.web.bind.annotation.RequestBody;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. @CrossOrigin
  9. @RestController
  10. @RequestMapping("/com")
  11. public class CommonController {
  12. @Value("${server.port}")
  13. private Integer port;
  14. @RequestMapping("/get")
  15. public Map<String, Object> get(@RequestBody Map<String, Object> parm) {
  16. parm.put("port", port);
  17. System.out.println(parm);
  18. return parm;
  19. }
  20. }

4.消费者

4.1新建子模块

        新建springcloud-comsumer1项目,端口号为9310

        涉及文件

        

4.2添加依赖

        pom.xml添加eureka客户端依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>javax.servlet</groupId>
  7. <artifactId>servlet-api</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>

4.3配置文件

        application.yml

  1. spring:
  2. application:
  3. name: springcloud-consumer
  4. server:
  5. port: 9310
  6. eureka:
  7. instance:
  8. instance-id: springcloud-consumer1
  9. appname: ${spring.application.name}
  10. prefer-ip-address: true
  11. lease-renewal-interval-in-seconds: 5
  12. lease-expiration-duration-in-seconds: 5
  13. client:
  14. service-url:
  15. #同时向集群中的所有eureka服务注册
  16. defaultZone: http://test1:9110/eureka/,http://test2:9120/eureka/

4.4主启动类添加@EnableEurekaClient注解

 4.5配置restTemplate

        在resttemplate上添加@LoadBalanced。使用服务名调用

  1. package com.zy.config;
  2. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  3. import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.web.client.RestTemplate;
  7. @Configuration
  8. @LoadBalancerClient(value="SPRINGCLOUD-COMMON")
  9. public class RestTemplateConfiguration {
  10. @Bean
  11. @LoadBalanced
  12. public RestTemplate restTemplate() {
  13. return new RestTemplate();
  14. }
  15. }

4.6编写controller

        通过resttemplate访问服务提供者springcloud-common的接口

  1. package com.zy.controller;
  2. import java.util.Map;
  3. import org.apache.commons.collections4.MapUtils;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.http.ResponseEntity;
  7. import org.springframework.web.bind.annotation.CrossOrigin;
  8. import org.springframework.web.bind.annotation.RequestBody;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import org.springframework.web.client.RestTemplate;
  12. @CrossOrigin
  13. @RestController
  14. @RequestMapping("/consumer")
  15. @SuppressWarnings({ "rawtypes", "unchecked" })
  16. public class ConsumerController {
  17. @Autowired
  18. private RestTemplate restTemplate;
  19. private static String port = null;
  20. @RequestMapping("/get")
  21. public Object get(@RequestBody Map<String, Object> parm) {
  22. ResponseEntity<Map> postForEntity = restTemplate.postForEntity("http://SPRINGCLOUD-COMMON/com/get", parm,
  23. Map.class);
  24. Map<String, Object> body = postForEntity.getBody();
  25. System.out.println(body);
  26. String rstPort = MapUtils.getString(body, "port");
  27. if (StringUtils.equals(port, rstPort)) {
  28. System.err.println("相同:" + port + " ,rstPort:" + rstPort);
  29. }
  30. port = rstPort;
  31. return body;
  32. }
  33. }

 4.6启动服务

        启动两个eureka服务,三个服务提供者(springcloud-common),服务消费者spirngcloud-consumer1

        访问eureka服务,发现生产者、消费者均已注册成功

        postman请求消费者接口,成功获取到服务提供者返回的信息,9210说明是调用了springcloud-common1服务

5.扩展使用

服务上下线监控

EurekaInstanceCanceledEvent 服务下线事件。

EurekaInstanceRegisteredEvent 服务注册事件。

EurekaInstanceRenewedEvent 服务续约事件。

EurekaRegistryAvailableEvent Eureka 注册中心启动事件。

EurekaServerStartedEvent Eureka Server 启动事件。

  1. package com.zy.eureka;
  2. import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent;
  3. import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRegisteredEvent;
  4. import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRenewedEvent;
  5. import org.springframework.cloud.netflix.eureka.server.event.EurekaRegistryAvailableEvent;
  6. import org.springframework.cloud.netflix.eureka.server.event.EurekaServerStartedEvent;
  7. import org.springframework.context.event.EventListener;
  8. import com.netflix.appinfo.InstanceInfo;
  9. //@Component
  10. public class EurekaStatusChangeListener {
  11. @EventListener
  12. public void listen(EurekaInstanceCanceledEvent event) {
  13. String serverId = event.getServerId();
  14. System.err.println(serverId + ":" + event.getAppName() + "服务下线");
  15. }
  16. @EventListener
  17. public void listen(EurekaInstanceRegisteredEvent event) {
  18. InstanceInfo instanceInfo = event.getInstanceInfo();
  19. String instanceId = instanceInfo.getInstanceId();
  20. System.err.println(instanceId + ":" + instanceInfo.getAppName() + "服务注册");
  21. }
  22. @EventListener
  23. public void listen(EurekaServerStartedEvent event) {
  24. Object source = event.getSource();
  25. System.err.println(source + "\r\n服务启动");
  26. }
  27. @EventListener
  28. public void listen(EurekaInstanceRenewedEvent event) {
  29. InstanceInfo instanceInfo = event.getInstanceInfo();
  30. String instanceId = instanceInfo.getInstanceId();
  31. System.err.println(instanceId + ":" + instanceInfo.getAppName() + "服务Renewed");
  32. }
  33. @EventListener
  34. public void listen(EurekaRegistryAvailableEvent event) {
  35. Object source = event.getSource();
  36. System.err.println(source + "\r\n服务Available");
  37. }
  38. }

传送门

  1. springcloud入门基础搭建之组件版本
  2. springcloud入门基础搭建之eureka
  3. springcloud入门基础搭建之ribbon
  4. springcloud入门基础搭建之feign
  5. springcloud入门基础搭建之hystrix
  6. springcloud入门基础搭建之zuul
  7. springcloud入门基础搭建之config
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/934544
推荐阅读
相关标签
  

闽ICP备14008679号