Spring Cloud D版及之前的版本使用的是Feign,而该项目现已更新为了OpenFeign。所以后续使用的依赖也发生了变化
Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。openfeign也是类似。
在使用之前我们首先启动我们的nacos,然后搭建我们的项目,然后将我们的服务注册到nacos。
使用
服务方搭建
新建一个Maven父工程名为openFeign
pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
然后新建maven子工程为customer-service。
依赖为
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在customer-service再新建子工程customer-service-api。在此工程中我们添加一个接口
package com.service.api;
import org.springframework.web.bind.annotation.GetMapping;
public interface ICustomerService {
/**
* 提供我们发布的接口
* @param userId
* @return
*/
@GetMapping("/getUser")
String getUser(Integer userId);
}
customer-service下新建子工程customer-service-impl,添加上一个customer-service-api的pom依赖,一个启动类,一个controller,一个配置文件。
pom依赖:
<dependency>
<groupId>com.openFeign</groupId>
<artifactId>customer-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
启动类:
@SpringBootApplication
public class AppCustomer {
public static void main(String[] args) {
SpringApplication.run(AppCustomer.class);
}
}
controller
@RestController
public class CustomerServiceImpl implements ICustomerService {
@Value("${server.port}")
private String serverPort;
@Override
public String getUser(Integer userId) {
return "我是会员服务!" + serverPort;
}
}
配置文件
spring:
application:
###服务名称
name: customer-service
cloud:
nacos:
discovery:
###nacos注册地址
server-addr: 127.0.0.1:8848
server:
port: 8082
启动后我们调用此忌口,并且在nacos的 服务列表查看我们的服务是否已经注册到nacos。
由上图可以知道我们的服务方已经没有问题了。
客户端搭建
还是上一次搭建的工程,在openFeign下搭建order-service子工程,然后添加配置文件,一个接口,一个controller,一个启动项。
pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
配置文件
spring:
application:
###服务名称
name: order-sevice
cloud:
nacos:
discovery:
###nacos注册地址
server-addr: 127.0.0.1:8848
server:
port: 8083
启动项:
@SpringBootApplication
@EnableFeignClients
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class);
}
}
接口(此接口使用openfeign)
@FeignClient("customer-service")
//去nacos中找到customer-service服务,然后找此服务的提供的接口,不需要使用rest风格的调用方式
public interface OrderServiceFiegn {
/**
* 提供我们发布的接口
* @param userId
* @return
*/
@GetMapping("/getUser")
String getUser(@RequestParam("userId") Integer userId);
}
controller
我们新建了一个后端接口,在此接口中调用我们本服务接口的方法即可实现调用第三方的接口。
@RestController
public class OrderServiceImpl {
@Autowired
private OrderServiceFiegn orderServiceFiegn;
/**
* 基于我们的fegin客户端形式实现了rpc远程调用
*
* @return
*/
@RequestMapping("/orderFeignToCustomer")
public String orderFeignToMember() {
String result = orderServiceFiegn.getUser(1);
return "我是订单调用会员服务的接口,返回结果" + result;
}
}
将服务端和客户端启动起来,我们可以看一下客户端调用的情况,以及在nacos的注册情况。
nacos界面我们也可以看到两个服务已经注册成功。
由此客户端的调用情况,我们可以看到调用服务端的方法成功,客户端端口号为8083,服务端为8082,服务端将自己的端口号返回,被客户端接收到了。
本章代码资源: