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