spring cloud alibaba之nacos–服务注册与发现与服务消费(三)
1.启动nacos server
2.服务提供者-provider (tsoft-order)
2.0 整体架构工程目录
2.1 引入依赖 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tsoft-parent</artifactId>
<groupId>com.tsoft</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tsoft-order</artifactId>
<dependencies>
<!--spring-boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient-version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.2 在 application.properties 中配置 Nacos server 的地址:
server.port=8083
spring.application.name=service-order
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
2.3 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApp {
public static void main(String[] args) {
SpringApplication.run(OrderApp.class,args);
}
}
2.4 增加接口和接口实现方法
- OrderService.java 接口
public interface OrderService {
@PostMapping("getOrderById")
public OrdOrder getOrderById(@RequestParam(name="id") String id);
}
- OrderServiceImpl.java 接口实现
@RestController
public class OrderServiceImpl implements OrderService {
@Override
public OrdOrder getOrderById(String id) {
OrdOrder order=new OrdOrder();
order.setId(id);
order.setOrderCode(id+"--code--");
order.setOrderDes("你好");
return order;
}
}
- OrdOrder.java 实体VO对象
public class OrdOrder implements Serializable {
private String id;
private String orderCode;
private String orderDes;
public String getOrderDes() {
return orderDes;
}
public void setOrderDes(String orderDes) {
this.orderDes = orderDes;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOrderCode() {
return orderCode;
}
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
@Override
public String toString() {
return "OrdOrder{" +
"id='" + id + '\'' +
", orderCode='" + orderCode + '\'' +
", orderDes='" + orderDes + '\'' +
'}';
}
}
2.5 启动该项目,访问nocos监控页面
可以看见,service-order 服务已经注册进来。
2.6 Postman测试该接口
3.服务消费者-consumer (tsoft-user)
3.0 tsoft-user 作服务提供者也作消费者
3.1 nacos消费服务有两种方式
第一种是: LoadBalanceClient 和 RestTemolate 结合的方式来访问(不推荐)
第二种是:使用Feign客户端来调用(类似于之前的Eurake的调用方式)(推荐)
3.1 引入依赖 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tsoft-parent</artifactId>
<groupId>com.tsoft</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tsoft-user</artifactId>
<dependencies>
<!--依赖项目模块-->
<dependency>
<groupId>com.tsoft</groupId>
<artifactId>tsoft-order</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--spring-boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient-version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.2 application.properties
spring.application.name=service-user
server.port=8082
#spring.cloud.nacos.discovery.group=GROUP_USER
management.endpoints.web.exposure.include=*
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.server-addr=127.0.0.1:8848
3.3 feign客户端
@FeignClient(name = "service-order") //被调用的服务
public interface OrderFeign extends OrderService {
}
3.4 测试controller
@RestController
public class UserController {
@Autowired
OrderFeign orderFeign;
@RequestMapping("/getOrderById")
public OrdOrder getOrderById(){
OrdOrder orderById = orderFeign.getOrderById("1");
return orderById;
}
}
3.5 使用注解 @EnableFeignClients 发现feign客户端
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class UserApp {
public static void main(String[] args) {
SpringApplication.run(UserApp.class,args);
}
}
3.6 启动 UserApp.java,可以看到service-user也注册进来
3.7 查看消费订阅情况,可见service-order服务,被service-user订阅了
3.8 测试调用接口,正确返回值,success
补充:父工程管理版本
<properties>
<spring.version>5.0</spring.version>
<spring-boot.version>2.1.7.RELEASE</spring-boot.version>
<spring-cloud.version>2.1.3.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>2.1.1.RELEASE</spring-cloud-alibaba.version>
<httpclient-version>4.5.10</httpclient-version>
<httpcore-version>4.4.10</httpcore-version>
<!-- Maven Plugin Versions -->
<maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
<maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
<maven-surefire-plugin.version>2.21.0</maven-surefire-plugin.version>
<gmavenplus-plugin.version>1.6</gmavenplus-plugin.version>
<jacoco.version>0.8.3</jacoco.version>
</properties>
github源码地址; tag–v0.1.1
https://github.com/liupantao/tsoft-parent/tree/v0.1.1