美文网首页
Consul 实现服务提供者和服务消费者

Consul 实现服务提供者和服务消费者

作者: Angle_洛熙 | 来源:发表于2020-09-20 19:56 被阅读0次

    使用Consul为服务注册中心, 实现服务提供者和服务消费者。

    Consul服务提供者

    添加依赖

    <!-- SpringCloud Consul依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    
    <!-- Actuator 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
            
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    添加配置

    spring.application.name=consul-provider
    server.port=8504
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.serviceName=service-provider
    provider.name=p1
    

    开启服务注册功能

    在启动类中添加注解@EnableDiscoveryClient. 开启服务注册

    服务接口

    @RestController
    public class HelloController {
        @Value("${provider.name}")
        private String name;
    
        @Value("${server.port}")
        private String port;
    
        @RequestMapping("/hello")
        public String hello() {
            return "provider:" + name + " port: " + port;
        }
    }
    

    配置服务提供者集群

    接下来添加配置文件application-consul-provider.properties,添加Consul的地址和端口号。

    添加配置

    spring.application.name=consul-provider
    server.port=8505
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.serviceName=service-provider
    provider.name=p2
    

    启动服务提供者集群

    打包服务提供者,然后打包jar 后分别以consul-provider1、consul-provider2的配置参数启动服务提供者

    java -jar consulprovider-0.0.1-SNAPSHOT.jar --spring.profiles.active=consul-provider1
    java -jar consulprovider-0.0.1-SNAPSHOT.jar --spring.profiles.active=consul-provider2
    

    运行后在Consul控制中心有两个服务提供者,ID分别是consul-provider-8504,consul-provider-8505.
    访问http://localhost:8504/hello,网页显示:provider:p1 port:8504
    访问http://localhost:8505/hello,网页显示:provider:p2 port:8505

    Consul 服务消费者

    添加依赖

    <!-- SpringCloud Consul依赖 -->
    <dependency>
            <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
            
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    添加配置

    spring.application.name=consul-consumer
    server.port=8506
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.register=false
    

    编写服务接口调用

    @RestController
    public class HelloController {
       @Autowired
       private LoadBalancerClient loadBalancerClient;
    
        @GetMapping("/hello")
        public String hello() {
            ServiceInstance serviceInstance = loadBalancerClient.choose("service-provider");
            URI uri = serviceInstance.getUri();
            String callService = new RestTemplate().getForObject(uri + "/hello", String.class);
            System.out.println(callService);
            return callService;
        }
    }
    

    测试

    多次访问http://localhost:8506/hello。网页交替出现provider:p1 port:8504 , provider:p2 port:8505,通过RestTemplate实现了客户端负载均衡。

    相关文章

      网友评论

          本文标题:Consul 实现服务提供者和服务消费者

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