• springboot2.1.*集成nacos和feign进行服务注册发现和调用


    springboot2.1.*集成nacos和feign进行服务注册发现和调用,我要加入nacos的应用是一个单体多模块的springboot 2.1.8版本的Java应用。

    1,引入和版本

    版本这里springboot与springcloud的版本不对应会导致报错。nacos.version也可以用2.1.2.RELEASE

    pom文件:

     <nacos.version>2.1.1.RELEASE</nacos.version>
     <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
    
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${nacos.version}</version>
            </dependency>
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-okhttp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
        
    

     以及

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    2,@EnableFeignClients

    可以启动类直接添加。

    @SpringBootApplication
    @EnableFeignClients // add
    public class AppRun {
    
        public static void main(String[] args) {
            SpringApplication.run(AppRun.class, args);
        }
    }
    

    3,配置

    这里是一个基于本地的配置文件风格,如果不想改变风格,不使用nacos的配置功能,可以直接在对应配置文件中添加。

    主配置:

    spring.application.name=appname
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always
    spring.cloud.nacos.discovery.enabled=true
    spring.cloud.nacos.discovery.service=${spring.application.name}
    spring.cloud.nacos.discovery.group=yourgroupname
    

    环境配置:

    spring.cloud.nacos.discovery.namespace=dev
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    

      

    4,客户端编写

    调用其他服务前,当然先看下别的服务的请求和返回,这里以一个全局唯一ID服务为例,入参一个业务类型,返回一个通用体包装下的long型id为例。

    请求:

    curl -X POST "http://192.168.168.85:8100/cbid/get/id/v1" -H "accept: */*" -H "Content-Type: application/json" -d "{ "bizTag": "user_id"}"

    返回:

    {
      "body": {
        "id": 2015
      },
      "errorDesc": null,
      "retCode": "0000",
      "retMsg": null,
      "success": true
    }

    基于这个接口,编写客户端:

    @FeignClient(value = "id-genetator", path = "/id/get",
        contextId = "test")
    public interface IdGeneratorClient {
    
      @PostMapping(value = "/v1",
          produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
          consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
      @ResponseBody
      RemoteBaseRsp<IdGeneratorRsp> getId(@RequestBody IdGeneratorReq bizTag);
    
    }
    

      

    public class RemoteBaseRsp<T> {
    
      private T body;
      private String errorDesc;
      private String retCode;
      private String retMsg;
      private Boolean success;
    }
    

      

    IdGeneratorRsp和IdGeneratorReq就是两个对象。里面是具体的参数请求和返回。

    5,调用测试

    注入客户端,调用。

    @Autowired
    private IdGeneratorClient idGeneratorClient;
    
    @Test
    public String get(){
    
      RemoteBaseRsp<IdGeneratorRsp> test = 
                idGeneratorClient.getId(IdGeneratorReq.builder().bizTag("test").build());
    
            if(!test.getSuccess() || null == test.getBody()){
                // 基础服务不可用,需要报系统异常
                log.error("idGeneratorClient.getId 获取异常,请检查cbid");
                // do error
            }
            // do sth.
            log.info("aa="+test);
            log.info("bb="+test.getBody().getId());
    
    }
    

      

  • 相关阅读:
    TF-IDF
    智力题
    max{X,Y}和min{X,Y}的概率分布
    K-Means
    提高工作效率:给设计师的10条建议
    每个软件工程师都应该尝试的5件事
    CSS sprite 圆角——源代码
    比较大气的网页元素
    彩色网页变黑白色CSS代码变黑白色调!
    jquery适用技巧
  • 原文地址:https://www.cnblogs.com/MyOceansWeb/p/13643977.html
Copyright © 2020-2023  润新知