微服务远程调用简单总结
服务 远程 简单 总结 调用
2023-06-13 09:13:14 时间
需求:项目调用公共服务区提供的接口
方法一:FeignClient
适用于都注册在远程服务托管中心的服务之间的调用,如Eurake,Nacos之类
导入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
yml配置
spring:
application:
name: qdchess-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#适用于运行于同一个服务器之间的参数
#不在同一个服务器的话就填对应地址
FeignClient接口编写:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
/**
* @Author Diuut
* @Date 2020/10/13 9:55
*/
@FeignClient(name = "qdchess-cmd")
public interface CmdFeignClient {
//接收方直接接收String格式,拿到的就是一串String
//如需要json格式的话就带@requestBody注解
@RequestMapping(value = "/wxpay",consumes = "text/plain",headers = "")
public String wxpay(@RequestParam String request);
@RequestMapping(value = "wxpay/verify")
public String wxcallback(@RequestBody String request);
@RequestMapping(value = "/alipay",method = RequestMethod.POST)
public String alipay(@RequestBody String request);
@RequestMapping(value = "alipay/verify")
public String alicallback(@RequestBody String request);
}
//根据调用接口不同,收发参数接收发送方式也不同
剩下的就只需要注入,然后就像调用一个方法一样直接调用接口即可,如果遇到延迟较大超时等问题,就需要在yml自己配置超时时间。
方法二:RestTemplate
添加Config类
@Configuration
public class RestTemplateConfig{
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if(httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName("utf8"));
break;
}
}
return restTemplate;
}
}
为方便使用的话也编写一个类用于调用,也可以直接在其他方法里调用
/**
* @Author Diuut
* @Date 2020/10/15 10:03
*/
@Component
@Slf4j
public class RestTemplateClient {
@Autowired
private RestTemplate restTemplate;
public String wxpay(String str){
return restTemplate.postForObject("http://qdchess-cmd/wxpay",str, String.class);
}
public String wxcallback(String str){
return restTemplate.postForObject("http://qdchess-cmd/wxpay/verify",str, String.class );
}
public String alipay(String str){
return restTemplate.postForObject("http://qdchess-cmd/alipay",str, String.class );
}
public String alicallback(String str){
return restTemplate.postForObject("http://qdchess-cmd/alipay/verify",str, String.class );
}
public String applecallback(String str){
return restTemplate.postForObject("http://qdchess-cmd/alipay/verify",str, String.class );
}
}
//也可以设定不同的传参方式
方法三:WebClient
第三个方式更多的针对于webFlux中的写法,如果与普通的阻塞写法混用的话,因为异步的原因,无法获取调用接口响应的数据,因此不太方便,不建议优先使用,这里便省略。
Post Views: 156
相关文章
- bindService:绑定本地服务和远程服务示例
- Dubbo集成ZooKeeper实现服务注册
- VNC远程连接服务安装与配置
- FTP远程文件传输服务安装与配置
- [原创]远程服务环境与本地环境互联
- springcloud微服务架构开发实战:常见微服务的消费者
- 【软件】RustDesk自己搭建远程控制服务软件 支持控制手机
- 【Service】bindService:绑定本地服务和远程服务示例[通俗易懂]
- 借助 Docker 来搭 Nginx 的积木:快速实现高性能二维码服务
- 单体的 TienChin 和微服务的 TienChin 有何异同?
- 凤凰架构 - 架构视角 - 访问远程服务
- 让远程成为本地,微服务后端开发的福音
- 【Binder 机制】AIDL 分析 ( 创建 Service 服务 | 绑定 Service 远程服务 )
- 为Docker容器中的服务配置固定容器IP教程
- 无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」
- SQL server服务显示远程过程调用失败的解决方法
- spring cloud 之 Feign 使用HTTP请求远程服务详解架构师
- 什么是远程过程调用(RCP),远程过程调用服务实现原理详解
- 器探索Linux下UDP服务器的无穷可能(linuxudp服务)
- 端缓存 揭示Oracle搭载无服务端缓存的真相(oracle没有服务)
- Linux RSH命令:远程登录服务的快捷方式(linuxrsh命令)
- MSSQL远程服务:可行且安全.(mssql能远程吗)
- 服务使用远程接口连接Redis服务器(怎么连接远程的redis)
- 优雅的Vue请求Redis驱动的高性能服务(vue请求redis)
- 重置Redis连接,构建更快速的服务通道(redis 重置连接)
- Windows 10物联网核心服务进入公开预览阶段,收费标准初步披露
- C#中控制远程计算机的服务的方法