美文网首页IT@程序员猿媛
Spring Cloud 构建微服务示例项目

Spring Cloud 构建微服务示例项目

作者: 敬亭阁主 | 来源:发表于2020-08-11 11:45 被阅读0次

    基本结构

    • 注册中心:EurekaServer
      注册中心提供服务的注册和查询能力。

    • 服务提供方:HelloWorldService
      服务提供方实现业务逻辑,并将暴露的接口注册到注册中心。

    • 服务消费方:DemoConsumer
      服务消费方从注册中心查询到服务提供方的相关信息,然后直接访问服务提供方获取相关服务。

    Eureka监控界面

    EurekaServer

    本身也是一个SpringBoot应用,启动后成为服务注册中心,支持多节点集群,本示例使用单节点。

    配置文件 application.properties

    # 设置spring应用命名,可以自定义,非必要
    spring.application.name=eureka-server
    # 设置Eureka Server WEB控制台端口,自定义
    server.port=8761
    
    #是否将自己注册到Eureka-Server中,默认的为true
    eureka.client.registerWithEureka=false
    #是否从Eureka-Server中获取服务注册信息,默认为true
    eureka.client.fetchRegistry=false
    

    Maven依赖

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

    启动注解

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

    HelloWorldService

    实际上这个服务就是一个标准的SpringBoot Web应用,可以部署多个,使用时由注册中心按指定规则进行选择。

    配置文件 application.properties

    # 对外提供Web服务的端口号
    server.port=8762
    
    # 服务注册ID,使用该ID可以从注册中心获取服务实例
    spring.application.name=hello-world-service
    
    # 要注册到的注册中心地址
    eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
    

    Maven依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    服务代码

    @RestController
    @SpringBootApplication
    public class HelloWorldApplication {
    
        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        public String sayHello() {
            return "Hello guy!";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(HelloWorldApplication.class, args);
        }
    }
    

    DemoConsumer

    这个应用和之前的HelloWorldService应用在配置和Maven依赖上基本一致,区别就是在代码中增加了从注册中心获取服务实例的部分。

    使用DiscoveryClient获取服务实例

    @Autowired
    private DiscoveryClient discoveryClient;
    
    /**
      * 调用DiscoveryClient获取服务实例列表,取第一个服务实例
      * @return
      */
    @RequestMapping(value = "/discovery", method = RequestMethod.GET)
    public String discoveryHello() {
        ServiceInstance si = this.discoveryClient.getInstances(serviceId).get(0);
        return sayHello(si);
    }
    

    使用LoadBalancerClient获取服务实例

        /**
         * ribbon负载均衡器,其中记录了从Eureka Server中获取的所有服务信息。
         * 这些服务的信息是IP和端口等。应用名称,域名,主机名等信息。
         */
        @Autowired
        private LoadBalancerClient loadBalancerClient;
    
        /**
         * 调用LoadBanlanceClient获取服务实例,choose策略见配置文件
         * @return
         */
        @RequestMapping(value = "/balance", method = RequestMethod.GET)
        public String balanceHello() {
            ServiceInstance si = this.loadBalancerClient.choose(serviceId);
            return sayHello(si);
        }
    

    ribbon选择策略可以在配置文件中进行配置,注意是按服务进行单独策略配置的

    # 设置负载均衡策略
    hello-world-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
    

    其它

    这三个应用由于存在依赖关系,因此启动需要按顺序,首先需要启动EurekaServer,然后启动HelloWorldService注册服务,最后启动DemoConsumer。

    源码已上传到码云:com.apollo.microService.demo

    相关文章

      网友评论

        本文标题:Spring Cloud 构建微服务示例项目

        本文链接:https://www.haomeiwen.com/subject/gfmedktx.html