zoukankan      html  css  js  c++  java
  • 在consul上注册web服务

    1. 创建web服务

    IDEA->File->New->Project->Empty Project,project name取名provider,点击finish

    2. 创建provider module

    在IDEA demo project中选择File->New->Module->Spring Initializer->Next,Artifact取名为provider

    3. 在Depedencies中选择web中web,Cloud Discovery中Consul Discovery, Ops中选择Actuator,core中选择Lombok,如下所示:

    web是spring-boot-starter-web, 是rest的spring boot web应用

    consul discovery是consul的依赖包

    actuator是spring boot提供的特性包,监控管理spring boot应用,其中提供的健康检查api被用于consul健康检查

    4. 工程目录如下:

    5. 添加一个rest api接口:

    package com.example.provider.controller;
    
    import com.example.provider.entity.ProviderPOJO;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Random;
    import java.util.concurrent.atomic.AtomicLong;
    
    @RestController
    @Slf4j
    public class ProviderController {
        private final AtomicLong counter = new AtomicLong(new Random().nextInt(1000));
    
        @Value("${server.port}")
        private int port;
    
        @RequestMapping("/demo")
        public ProviderPOJO demo(@RequestParam(value = "name", defaultValue = "provider") String name) {
            ProviderPOJO providerPOJO = new ProviderPOJO(counter.incrementAndGet(), name, port);
            log.info("ProviderController:demo(): " + providerPOJO);
            return providerPOJO;
        }
    }

    pojo类:

    package com.example.provider.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class ProviderPOJO {
        private Long id;
        private String name;
        private Integer port;
    }

    6. 添加配置文件:src/main/resources/bootstrap.properties

    主要启用了consul配置,并配置了consul的服务器地址和端口,其中instance-id用到了随机数,因为consul是以instance-id来区分一个同名服务的不同实例:

    spring.application.name=provider
    server.port=${PORT:8081}
    spring.cloud.consul.enabled=true
    spring.cloud.consul.port=8500
    spring.cloud.consul.ribbon.enabled=true
    spring.cloud.consul.discovery.enabled=true
    spring.cloud.consul.discovery.register=true
    spring.cloud.consul.discovery.prefer-ip-address=true
    spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.application.instance_id:${random.value}}:${server.port}

    7. 启动本机consul注册发现服务中心(使用dev模式)

    docker run --name consul0 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.2.2 agent -dev -bind=0.0.0.0 -client=0.0.0.0

    8. 启动provider应用,从日志输出中可以看到,往id为provider-9769b141d132f135edca03091da8baf9-8080,name为provider,ip为192.168.33.74,端口为8080的服务:

    9. 浏览器访问consul管理后台:

    10. 浏览器访问provider的test接口:http://localhost:8080/test

    11. 水平扩展provider微服务:

    第一步: 更改bootstrap.properties中端口为8081

    第二步:更改ProviderApplication启动配置,右上角勾选Share,不勾选Single instance only,如下所示:

    第三步:再次运行provider工程,将存在两个provider的两个实例

    浏览器访问consul管理后台:http:localhost:8500,则如下所示,会出现两个provider实例,端口分别为8080, 8081,浏览器访问provider的test接口,http://localhost:8080/test 和 http://localhost:8081/test,两个provider实例返回的id和port是不同的。

  • 相关阅读:
    路由器配置——基于链路的OSPF简单口令认证
    路由器配置——基于区域的OSPF,MD5认证
    将博客搬至CSDN
    爬虫入门【11】Pyspider框架入门—使用HTML和CSS选择器下载小说
    爬虫入门【10】Pyspider框架简介及安装说明
    【Python基础】装饰器的解释和用法
    爬虫入门【9】Python链接Excel操作详解-openpyxl库
    爬虫实战【13】获取自己的动态代理ip池
    爬虫实战【12】使用cookie登陆豆瓣电影以及获取单个电影的所有短评
    爬虫实战【11】Python获取豆瓣热门电影信息
  • 原文地址:https://www.cnblogs.com/miaoying/p/10305739.html
Copyright © 2011-2022 走看看