Http服务化改造实践(一)

WilliamGates
发布于 2022-6-21 16:17
浏览
0收藏

 

大家好,我是威哥,《RocketMQ技术内幕》作者、RocketMQ社区首席布道师、中通快递基础架构资深架构师,越努力越幸运,唯有坚持不懈,与大家共勉。


在微服务架构体系中远程RPC调用主要包括Dubbo与Http调用两个大类,由于Dubbo拥有服务注册中心,并且起服务的命名非常规范,使用包名.类名.方法名进行描述。

 

而http调用通常都是使用httpclient等相关类库,这些在使用上并没有问题,但API都是分散在整个工程的各个地方,如果HTTP调用也可以使用类似Dubbo服务的表示方法,采用声明式定义就好了。

 

在开源的世界中只有想不到,没有找不到,为了解决Feign的声明式服务化管理,Feign框架应运而生,本文主要介绍如何使用Feign实现Http服务声明化管理与调用。

 

1、什么是Feign

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Feign通过注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,封装了http调用流程。

 

2、快速入门实例

2.1定义客户端
首先要引入Feign的maven依赖,如下图所示:

 <dependency>
   <groupId>com.netflix.feign</groupId>
   <artifactId>feign-core</artifactId>
   <version>8.18.0</version>
 </dependency>

 

2.2 定义服务调用API(类似Dubbo API)
服务调用的API声明代码如下所示:

@FeignClient
public interface HelloControllerApi {
 @RequestLine("GET /api/hello?name={name}")
 String hello(@Param(value = "name") String name);
}

 

这里的要点是使用@FeignClient进行声明。声明后就可以通过HelloControllerApi进行远程HTTP调用,示例代码如下:

public class HelloControllerApiTest {

 private HelloControllerApi service;

 @Before
 public void before(){
  service = Feign.builder()
    .options(new Request.Options(1000, 3500))
    .retryer(new Retryer.Default(5000, 5000, 3))
    .target(HelloControllerApi.class, "http://127.0.0.1:8080");
 }
 @Test
 public void hello(){
        // 调用http://127.0.0.1:8080/api/hello?name=world 的http接口
  System.out.println(service.hello("world"));
 }

}

 

当然需要在调用方的启动类上增加@EnableFeignClients(defaultConfiguration = FeignConfiguration.class)注解。

 

2.3定义服务端
服务端与Feign并无关系,主要按照API的方式实现即可,服务端实现代码如下所示:

@Controller
@RequestMapping(value = "api")
public class HelloController {
 @RequestMapping(value = "/hello", method = {RequestMethod.GET})
 @ResponseBody
 public String list(@RequestParam String name) {
  return "Hello " + name;
 }
}

//启动类
@SpringBootApplication(scanBasePackages = {"com.vhicool.manager"})
public class ManagerApplication {
 public static void main(String[] args) {
  SpringApplication.run(ManagerApplication.class, args);
 }
}

 

文章转自公众号:中间件兴趣圈

标签
已于2022-6-21 16:17:30修改
收藏
回复
举报
回复
    相关推荐