zoukankan      html  css  js  c++  java
  • Spring Cloud Eureka 注册,发布,调用服务

    Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,如Netflix Eureka、Consul和Zookeeper。在Spring Cloud服务治理抽象层的作用下,可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。

    Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

    一  下面通过一个简单的例子来尝试下Spring Cloud Eureka ,步骤如下:

    1.创建Spring Boot项目,命名eureka,pom文件中还需要添加:

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

    ---

    2.新建Application主类:

    @EnableEurekaServer
    @SpringBootApplication
    public class Application
    {
        public static void main( String[] args )
        {
            SpringApplication.run(Application.class, args);
        }
    } 

    ---通过@EnableEurekaServer激活服务注册中心

    3.添加配置文件application.properties文件:

    spring.application.name=eureka
    server.port=8001
    eureka.instance.hostname=localhost
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false

    ---默认设置下,注册中心会将自己作为客户端来注册自己,通过以上红色配置可关闭该行为。

    4.启动服务,然后使用浏览器访问http://localhost:8001/  ,可查看服务监控页面,此时注册实例为空。

    二  接下来创建两个服务提供者,并注册在Eureka上。

    1.新建Spring Boot项目,命名client1, 增加pom依赖

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

    ---

    2.添加主类

    @EnableDiscoveryClient
    @SpringBootApplication
    public class App 
    {
        public static void main( String[] args )
        {
            SpringApplication.run(App.class, args);
        }
    }

    ---通过@EnableDiscoveryClient激活DiscoveryClient,使Eureka可以发现该服务。

    3.添加配置文件application.properties文件

    spring.application.name=client
    server.port=8071
    eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/

    ---eureka.client.serviceUrl.defaultZone属性为服务注册中心的配置,指定服务注册中心的地址

    4.添加类InfoController.java

    @RestControllerpublic class TestController {
        @RequestMapping("/info")
        public String msg() {
            return "client1 servcie";
        }
    }

    ---

    5.再创建一个一模一样的服务,命名client2,修改端口为8072,启动这两个服务,再访问http://localhost:8001/ ,可见

    说明两个服务都已注册成功

    三   创建一个服务调用者

    1.新建Spring Boot项目,命名consumer,添加pom依赖

    <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    
    <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    ---

    2.新建主类

    @EnableDiscoveryClient
    @SpringBootApplication
    public class App 
    {
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
        public static void main( String[] args )
        {
            SpringApplication.run(App.class, args);
        }
    }

    --- 同样注册在Eureka上

    3.添加配置文件

    spring.application.name=consumer
    server.port=8081
    eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/

    --- 指定注册地址

    4.添加TestController

    @RestController
    public class TestController {
    
        @Autowired
        LoadBalancerClient loadBalancerClient;
    
        @Autowired
        RestTemplate restTemplate;
    
        @GetMapping("/test")
        public String test() {
    
            ServiceInstance serviceInstance = loadBalancerClient.choose("client");
            String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/info";
            return restTemplate.getForObject(url, String.class);
        }
    
    }

    --- LoadBalancerClient 可支持负载均衡的client节点选择

    5.启动服务,查看Eureka界面

    使用浏览器访问 http://localhost:8081/test, 可看到显示client2 service,说明服务调用成功。

    有时候重启服务报错说端口占用,则需强杀进程

    lsof -i tcp:8081  然后 kill pid 

    参考 http://projects.spring.io/spring-cloud/spring-cloud.html

    end 

  • 相关阅读:
    java.util.ConcurrentModificationException故障分析
    Eclipse常见问题总结-持续更新
    MySQL学习—简单存储过程
    Mysql学习——触发器
    MySQL学习—多表查询(内连接,外链接,全连接)
    JDK环境变量配置
    Spring学习总结(二)——容器对Bean的管理
    Spring学习总结(一)——Spring容器的实例化
    类加载机制
    手写数据库连接池
  • 原文地址:https://www.cnblogs.com/luangeng/p/7252672.html
Copyright © 2011-2022 走看看