Loading

二:nacos 的服务注册

一:怎么引用依赖

 

dependencyManagement:spring cloud alibaba 的版本,由于spring cloud alibaba 还未纳入spring cloud 的主版本管理中,所以需要自己加入。

 

我们在Parent 项目中引入Spring Cloud:

Spring Cloud Alibaba 项目都是基于 Spring Cloud,而 Spring Cloud 项目又是基于 Spring Boot 进行开发,并且都是使用 Maven 做项目管理工具。在实际开发中,我们一般都会创建一个依赖管理项目作为 Maven 的 Parent 项目使用,这样做可以极大的方便我们对 Jar 包版本的统一管理。

 

 

 

具体的版本介绍请下如下配置:

Spring Cloud Finchley 是较老一个版本,对应springboot 2.0.x

最开始这样加载依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>0.2.2.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

升级后:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.0.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

 

Spring Cloud Greenwich 是较新一个版本,对应对应springboot 2.1.x

最开始这样加载依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>0.9.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

升级后:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

 

dependencies:当前应用要使用的依赖内容。这里主要新加入了 Nacos 的服务注册与发现模块:spring-cloud-starter-alibaba-nacos-discovery。由于 dependencyManagement 中已经引入了版本,这里就不用指定具体版本了。

 

服务提供者,添加如下依赖:

       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
       </dependency>

nacos的配置中心,添加如下依赖:

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

 

配置:

Spring Boot 配置文件的加载顺序,其中 bootstrap.properties 配置为最高优先级:
依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

 

首先在 bootstrap.yml 文件里,进行nacos的配置拉取:

示例:

spring:
  application:
    name: ace-admin
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
  profiles:
    active: dev

 

 

服务注册地址:

spring:
 application:
   name: nacos-provider
 cloud:
   nacos:
     discovery:
       server-addr: 192.168.233.150:8848

server:
 port: 8082

management:
 endpoints:
   web:
     exposure:
       include: "*"
user:
   name: caps

 

 

 入口函数添加注解:@EnableDiscoveryClient

 

 

在项目中找一个 Controller ,增加一个请求方法,测试配置更新效果

 

 

// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;

// 从上下文中读取配置
@GetMapping(value = "/hi")
public String sayHi() {
    return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
}

 

 

 

使用 FeignClient 优化调用服务

首先在pom.xml中添加FeignClient引用

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

 

 

 

 通过 Spring Cloud 原生注解 @EnableFeignClients 开启

 

 

 

编写远程服务调用接口

package com.ichochy.nacos.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(value = "service-provider")
public interface ServiceInterface {

    @RequestMapping("/service/echo/{name}")
    public String echo(@PathVariable String name);

}

远程调用服务

package com.ichochy.nacos.controller;

import com.ichochy.nacos.service.ServiceInterface;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/result")
public class ResultController {

    @Autowired
    private ServiceInterface serviceInterface;

    @RequestMapping("feignClient/{name}")
    public String feignClient(@PathVariable String name){
        return serviceInterface.echo(name);
    }

}

访问地址:http://127.0.0.1:8080/result/feignClient/ichochy

参考资料:

https://www.cnblogs.com/faramita/p/11340475.html

 

posted @ 2020-03-27 15:07  Sam Xiao  阅读(1194)  评论(0编辑  收藏  举报