首页 > 其他分享 >使用Spring HttpExchange替代FeignClient进行http远程服务调用

使用Spring HttpExchange替代FeignClient进行http远程服务调用

时间:2024-04-25 09:44:55浏览次数:26  
标签:FeignClient HttpExchange http String spring world public

背景

spring boot 3.0使用的spring framework 6.0里有一个全新的http服务调用注解@HttpExchange,该注解的用途是可以进行申明式http远程服务调用。与Feign作用相同,在spring boot 3.x里,由于本身spring内置,相比Feign可以大幅减少第三方包依赖,且比Feign进轻巧。

依赖:

@HttpExchange位于spring-web.jar里,因此只要项目是spring boot 3.x且引入了spring-boot-starter-web,即可使用@HttpExchange进行申明式http远程服务调用。

使用步骤

步骤1:使用@HttpExchange定义http接口,此类可以打包成独立jar或独立maven module工程,用于给后面的provider和client依赖。

@HttpExchange("/hello")
public interface HelloClient {

    @GetExchange("/world")
    String world(@RequestParam("world") String world);

    @PostExchange("/user")
    UserResponse user(@RequestBody UserRequest userRequest);

    @Data
    class UserRequest {
        String userName;
    }

    @Data
    class UserResponse {
        String userName;
        String remark;
    }

}

步骤2:在服务提供工程里(provider)里实现一个以上接口的服务端

@RestController
public class HelloProvider implements HelloClient {
    @Override
    public String world(String world) {
        return "Hello " + world;
    }

    @Override
    public UserResponse user(UserRequest userRequest) {
        UserResponse userResponse = new UserResponse();
        userResponse.setUserName(userRequest.getUserName());
        return userResponse;
    }

}

步骤3:在服务调用工程里(client)里配置http远程服务client:

@Configuration
public class HttpClientConfig {

    @Bean
    RestClient.Builder restClientBuilder() {
        return RestClient.builder();
    }

    @Bean
    public HelloClient helloClient(RestClient.Builder restClientBuilder) {
        return HttpServiceProxyFactory
                .builder()
                .exchangeAdapter(
                        RestClientAdapter.create(
                                restClientBuilder.baseUrl("http://localhost:8001").build()
                        )
                )
                .build().createClient(HelloClient.class);
    }

}

步骤4:在服务调用工程里(client)里进行http远程服务调用

@RestController
public class MyClientController {

    /**
     * 注入远程服务
     */
    @Autowired
    private HelloClient helloClient;

    @GetMapping("/client")
    public String client() {
        return helloClient.world("this is a client"); // 虽然helloClient的实现不在此工程,但调用时像调本地方法一样简单
    }

}

标签:FeignClient,HttpExchange,http,String,spring,world,public
From: https://www.cnblogs.com/jiayuan2006/p/18156919

相关文章

  • https://github.com/meta-llama/llama3 文生图
    https://github.com/meta-llama/llama3 Skiptocontent NavigationMenu Product Solutions OpenSource Pricing Searchorjumpto...  SigninSignup  meta-llama/llama3PublicNotificationsFork 1.4k Star ......
  • 【Maven】解决 Since Maven 3.8.1 http repositories are blocked.问题
    【Maven】解决SinceMaven3.8.1httprepositoriesareblocked.问题在你本地setting.xml文件中 附上这段,然后mvnclean后,重新Reimport就可以了  <!--解决SinceMaven3.8.1httprepositoriesareblocked.问题--><mirrors><mirro......
  • 客户端使用 FeignClient 调用服务端服务时,报错:Request method ‘POST‘ not supporte
    客户端使用FeignClient调用服务端服务时,报错:Requestmethod‘POST‘notsupported修改错误前调用方式:FeignClient 接口服务@FeignClient(contextId="remotePayFormService",value="payment-service-system")publicinterfaceRemotePayFormService{@GetMap......
  • Mysql:canal-deployer:如何阻断canal-client对deployer上的filter过滤条件订阅修改:https
     也算是安全管理上的一个控制点:本来,允许客户端去根据自己的实际需求去服务端订阅自己关心的数据流,是很好的。but,但是,服务端的黑白名单过滤,尤其是白名单的filter条件会被客户端的最新订阅的过滤条件给覆盖!!!这算是bug吗?上游服务端怎么显得那么没地位呢!!!??? #===================......
  • 性能优化之使用HTTP2.0
    HTTP2.0的优势配置测试怎么查看当前网站http版本chromeHTTP协议版本检测Chrome控制台window.chrome.loadTimes(){commitLoadTime:1713866839.398connectionInfo:"h2"finishDocumentLoadTime:1713866839.995finishLoadTime:1713866841.436firstPa......
  • 使用 HttpWebRequest 类发送大量数据时,POST 或 PUT 请求失败
    本文可帮助你解决在使用 HttpWebRequest 类在运行Microsoft.NETFramework的计算机上发送大量数据时可能会引发错误的问题。原始产品版本:.NETFramework原始KB编号: 908573症状当你使用 HttpWebRequest 类通过 POST 或 PUT 请求发送大量数据时,请求可能会在运行.......
  • 直播协议详解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP
    直播协议详解rtmp、hls、http-flv、WebRTC、rtsp 本期我们详细讨论直播的相关协议,包括:HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。我们将会详细介绍这些协议的工作原理、应用场景、及延迟的原因。我们按这样的顺序讨论​:RTMP、HTTP-FLVHLSWeb-RTCRTSP一、RTMP、HTTP-FLV......
  • Pycharm报错:ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org‘
    今天在pycharm里面pipinstall库的时候报了这个错,如图所示:第一种,设置超时时间,命令如下:pip--default-timeout=1000install-U模块名第二种,用镜像网站进行下载,这种方法下载的速度超快的哦=.=,命令如下:pip--default-timeout=100install库名称-ihttp://pypi.douban.com/......
  • 配置nginx HTTPS证书
    配置nginxHTTPS证书安装CerbotLet‘sEncryptapt安装不了cerbot,换snapdsudoaptinstallsnapdsudosnapinstall--classiccertbot确保Certbot命令可以通过创建一个符号链接到/usr/bin目录中的命令来运行:sudoln-s/snap/bin/certbot/usr/bin/certbot生成证书ng......
  • feign调用接口报错No qualifying bean of type '***HttpMessageConverters' available
    在整合springcloudgeateway时,调用了feign接口,报错Noqualifyingbeanoftype'org.springframework.boot.autoconfigure.http.HttpMessageConverters'available报错信息feign.codec.EncodeException:Noqualifyingbeanoftype'org.springframework.boot.autocon......