1、服务器端搭建
1.1 子模块 customer-service-api-demo,提高发布接口
package com.hake.customerserviceapidemo;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @Author: Liu Yue
* @Descripition:
* @Date; Create in 2021/7/6 9:40
**/
public interface ICustomerService {
/**
* 提供我们发布的接口
* @param userId
* @return
*/
@GetMapping("/getUser")
String getUser(Integer userId);
}
1.2 子模块 customer-service-impl-demo
父项目的pom.xml
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
</parent>
<groupId>com.hake</groupId>
<artifactId>cloudalibaba-openfegin-customer-service-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloudalibaba-openfegin-customer-service-demo</name>
<description>Demo project for Spring Boot</description>
<modules>
<module>customer-service-api-demo</module>
<module>customer-service-impl-demo</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
customer-service-impl-demo 的 pom.xml
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hake</groupId>
<artifactId>cloudalibaba-openfegin-customer-service-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.hake</groupId>
<artifactId>customer-service-impl-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>customer-service-impl-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.hake</groupId>
<artifactId>customer-service-api-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
customer-service-impl-demo 的 properties
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
实现类 CustomerServiceImpl.java
/**
* @Author: Liu Yue
* @Descripition:
* @Date; Create in 2021/7/6 9:46
**/
@RestController
@Slf4j
public class CustomerServiceImpl implements ICustomerService {
@Value("${server.port}")
private String serverPort;
@Override
public String getUser(Integer userId) {
return "我的会员服务!端口号:" + serverPort;
}
}
访问地址:http://localhost:9015/getUser
2、客户端搭建
创建父项目 cloudalibaba-openfegin-demo
pom.xml
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
</parent>
<groupId>com.hake</groupId>
<artifactId>cloudalibaba-openfegin-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloudalibaba-openfegin-demo</name>
<description>Demo project for Spring Boot</description>
<modules>
<module>cloudalibaba-gateway-demo</module>
<module>order-service-demo</module>
</modules>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2.1 创建子模块 order-service-demo
properties配置
# 应用名称
spring.application.name=order-service-demo
# 应用服务 WEB 访问端口
server.port=9016
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
pom.xml配置关键部分
<parent>
<groupId>com.hake</groupId>
<artifactId>cloudalibaba-openfegin-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
OrderServiceFiegn调用
/**
* @Author: Liu Yue
* @Descripition:
* @Date; Create in 2021/7/6 10:16
**/
@FeignClient("customer-service-impl-demo")
//去nacos中找到customer-service-impl-demo服务,然后找此服务的提供的接口,不需要使用rest风格的调用方式
public interface OrderServiceFiegn {
/**
* 提供我们发布的接口
* @param userId
* @return
*/
@GetMapping("/getUser")
String getUser(@RequestParam("userId") Integer userId);
}
RestController
/**
* @Author: Liu Yue
* @Descripition:
* @Date; Create in 2021/7/6 10:18
**/
@RestController
public class OrderServiceImpl {
@Autowired
private OrderServiceFiegn orderServiceFiegn;
/**
* 基于我们的fegin客户端形式实现了rpc远程调用
*
* @return
*/
@GetMapping("/orderFeignToCustomer")
public String orderFeignToMember() {
String result = orderServiceFiegn.getUser(1);
return "我是订单调用会员服务的接口,返回结果" + result;
}
}
访问地址:http://localhost:9016/orderFeignToCustomer
3、gateway配置
创建项目 cloudalibaba-gateway-demo
pom.xml
注意:不要引用web的支持,版本搭配采坑
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
yml配置
server:
port: 9018
spring:
application:
name: cloudalibaba-gateway-demo
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: my-customer
uri: lb://customer-service-impl-demo #转发的服务,lb代表负载均衡,使用以后必须加filters。
filters:
- StripPrefix=1
predicates:
- Path=/customer-service/** #拦截的路径
- id: my-order
uri: lb://order-service-demo
filters:
- StripPrefix=1
predicates:
- Path=/order-sevice/**
- id: test
uri: http://www.taobao.com/ #转发到taobao
filters:
- StripPrefix=1
predicates:
- Path=/test/** #拦截到路径有test
discovery:
locator:
enabled: true
访问地址:http://localhost:9018/order-sevice/orderFeignToCustomer
访问地址:http://localhost:9018/customer-service/getUser
访问地址:http://localhost:9018/test
跳转到淘宝
getway,是Spingcloud2的路由器,详细介绍请百度或者到官网查询,此处只提供实现,不做具体的介绍。
每天进步一点点!!!