nacos作为注册中心及openfeign的服务调用
1.下载安装并启动nacos
之前的文章有详细的下载地址和安装教程
nacos下载传送门:https://blog.csdn.net/qq_41514643/article/details/107513530
nacos安装传送门:https://blog.csdn.net/qq_41514643/article/details/107516554
2.注册在nacos的服务分为提供者(provider)和消费者(consumer)
2.1提供者(provider)
2.1.1添加依赖
springcloudalibaba使用时要注意各个依赖的版本对应,以下是版本对应表
(详见:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E)
毕业版本依赖关系
因为是在原项目基础上添加注册中心的,所以这里以项目springboot2.0.4版本为例(如果觉得版本太低可以根据对照表更新版本)
pom依赖
<properties>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>2.0.2.RELEASE</spring-cloud-alibaba.version>
</properties>
<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>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- web开发相关的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.0.2.RELEASE</version>
<!-- 如果你项目的restful框架用的jersey,eureka或nacos会与它产生ws-rs的依赖冲突,在此需要排除依赖,如果用的是springmvc则可忽略此操作 -->
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2.1.2yml配置
server:
port: 20001
spring:
cloud:
nacos:
discovery:
# 服务注册中心
server-addr: 192.168.32.129:8848
application:
#服务名
name: base-provider
2.1.3开启注解(如果springcloud版本在E之后即可省略此步骤)
在application启动类添加@EnableDiscoveryClient
启动项目后即可在nacos看到本服务
2.2消费者(consumer)
消费者和提供者的注册方式相同,只不过在此基础上添加了openfeign的服务调用功能
2.2.1依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>2.0.4.RELEASE</spring-cloud-alibaba.version>
</properties>
<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>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<!-- web开发相关的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
2.2.2yml配置
spring:
application:
# 服务名
name: service-comsumer
cloud:
nacos:
discovery:
# 服务注册中心
server-addr: 192.168.32.129:8848
server:
# 服务端口
port: 8070
management:
# 端点检查(健康检查)
endpoints:
web:
exposure:
include: "*"
2.2.3开启注解(如果springcloud版本在E之后即可省略此步骤)
在application启动类添加@EnableDiscoveryClient
2.2.4openfeign的使用
使用openfeign仍采用常规的controller-service开发习惯,逻辑代码在service中实现(@Component:类交给spring管理;@FeignClient:标识扫描的远程调用接口,name为服务名;@GetMapping后为调用目标方法的路径名)
service
package com.example.demo.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @ClassName TestService
* @Description
* @Author Administrator
* @Date 2020/8/21 0021 9:46
* @Version 1.0
*/
@Component
@FeignClient(name="base-provider")
public interface TestService {
/**
* 查询
* @return
*/
@GetMapping("/api/tradeinfo/weather")
String getServiceInfo();
/**
* 查询
* @param id
* @return
*/
@GetMapping("/api/tradeinfo/{id}")
String selectById(@PathVariable("id") String id);
}
controller
package com.example.demo.controller;
import com.example.demo.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class TestController {
@Autowired
TestService testService;
@GetMapping("/test")
public String Test(@RequestParam String id) {
String s = testService.selectById(id);
return s;
}
@GetMapping("/test1")
public String Test1() {
return testService.getServiceInfo();
}
}
以下是调用consumer接口返回的数据