微服务实战(十)各微服务之间的相互调用 Feign + Nacos

本章主要内容

之前我们介绍了通过服务网关来调用注册中心的微服务,但是各微服务之间怎样优雅简洁的相互调用呢?下面我们又引入一个新的组件:Feign  https://github.com/OpenFeign/feign

Feign是什么?

(使用上注解是@Feign)

Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

OpenFeign又是什么?

(使用上注解是@FeignClient

OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,
并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

Nacos中心里微服务用OpenFeign进行相互调用

首先我们复制以前的 combat-provider 工程,重命名为 combat-provider-feign

maven依赖中需要新增一个openfeign,pom.xml如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

写一个接口,作为原 combat-provider 中的服务代理!完成后 我们调用 combat-provider-feign中的服务,然后combat-provider-feign请求原先  combat-provider接口进行返回。

package com.zjf.combat.api.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "nacos-provider")
public interface FeignService {
	
@GetMapping("/config/version")
    String version();
}

其中,我们用到了 @FeignClient 注解,说明此接口是需要用Feign组件去调用远程的服务接口。而其中的 name=nacos-provider 则是指向 注册中心中对应服务的名称 (即combat-provider中的application.name)

接着我们在 combat-provider-feign中再写一个控制器,便于外部调用

package com.zjf.combat.api.feign;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableFeignClients
public class FeignApi {
	
	@Autowired
	private FeignService feignService;
	
	@GetMapping(value = "/config/version")
        public String version() {
            return feignService.version();
        }
}

 其中 @EnableFeignClients 表示启用Feign功能,GetMapping中的路径和实际目标微服务combat-provider的接口路径

我们相继启动

注册中心              Nacos(端口8848)、

微服务1                 combat-provider(端口9999)、

网关                     combat-gateway(端口9000)、

微服务2                combat-provider-feign(端口9997)

Nacos注册中心看到上述服务已上线

测试 微服务2 中通过feign 调用 微服务1

测试 通过网关--->调用微服务2--->调用微服务1

发布了30 篇原创文章 · 获赞 123 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u011177064/article/details/104309921