首页后端开发其他后端知识SpringCloud中如何实现远程服务调用

SpringCloud中如何实现远程服务调用

时间2024-03-25 00:24:03发布访客分类其他后端知识浏览946
导读:相信很多人对“SpringCloud中如何实现远程服务调用”都不太了解,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且内容详细,逻辑清晰,接下来小编就为你详细解释一下这个问题。 本文主要记录基于Nacos实现服务注...
相信很多人对“SpringCloud中如何实现远程服务调用”都不太了解,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且内容详细,逻辑清晰,接下来小编就为你详细解释一下这个问题。


本文主要记录基于Nacos实现服务注册中心和远程服务调用

1. 基于Nacos实现服务注册与发现

基于pring-boot-starter-parent 2.6.8,pring-cloud-dependencies 2021.0.3,order服务和user服务

1.1 pom依赖

!--服务注册与发现-->
    
dependency>
    
	groupId>
    com.alibaba.cloud/groupId>
    
	artifactId>
    spring-cloud-starter-alibaba-nacos-discovery/artifactId>
    
	version>
    2021.0.1.0/version>
    
/dependency>
    
!--远程服务调用负载均衡-->
    
dependency>
    
	groupId>
    org.springframework.cloud/groupId>
    
	artifactId>
    spring-cloud-loadbalancer/artifactId>
    
/dependency>

1.2 yaml配置

order服务application.yml

spring:
application:
name: orderservice
cloud:
#找对应网段的网卡 不配置内部服务就走外网
inetutils:
preferred-networks: 192.168.0
nacos:
discovery:
server-addr: 192.168.0.221:8848

user服务application.yml

spring:
application:
name: userservice
cloud:
#找对应网段的网卡 不配置内部服务就走外网
inetutils:
preferred-networks: 192.168.0
nacos:
discovery:
server-addr: 192.168.0.221:8848

1.3 添加启动注解

@EnableDiscoveryClient,需要注册到Nacos的服务都需要添加

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {

    public static void main(String[] args) {
    
        SpringApplication.run(OrderApplication.class, args);

    }

}

1.4 启动服务查看控制台

控制台地址http://192.168.0.221:8848/nacos,账号密码都是nacos,查看服务列表

服务详情图

如果未配置preferred-networks,ip则显示外网ip,也会用于服务调用

2.基于Nacos实现远程服务调用

2.1 客户端创建RestTemplate Bean

	@LoadBalanced    // 开启负载均衡策略
    @Bean
    public RestTemplate restTemplate() {
    
        return new RestTemplate();

    }
    

2.2 客户端调用代码

    @Autowired
    RestTemplate restTemplate;
    
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/test")
    public String test() throws Exception {
    
        //可以获取到对应服务的列表 服务名 ip 端口均可从这里面获取到 也可以自己决定调用顺序
        ListServiceInstance>
     instances = discoveryClient.getInstances("userservice");
    
		//get方式调用 
        String template = restTemplate.getForObject("http://userservice/getTime/1123?name=jack", String.class);
    
        MapString, Object>
     resMap = new HashMap>
    ();
    
        resMap.put("aaaa", "bbbb");
    
        //post调用方式
        RequestEntityMapString, Object>
    >
     requestEntity = RequestEntity
                .post("http://userservice/postTime")
                .contentType(MediaType.APPLICATION_JSON)
                .body(resMap);
    
        ResponseEntityMap>
     responseEntity = restTemplate.exchange(requestEntity, Map.class);
]
        log.info("rest -- {
}
    ", template + ":" + responseEntity.getBody());
    
        return template + ":" + responseEntity.getBody();

    }

2.3 服务端暴露接口

@GetMapping("/getTime/{
uuid}
")
public String getTime(@PathVariable String uuid, @RequestParam String name) {
    
    return new Date().getTime() + ":" + uuid + ":" + name;

}
    
@PostMapping("/postTime")
public MapString, Object>
     getTime(@RequestBody MapString, Object>
 params) {
    
    params.put("time", new Date().getTime());
    
    return params;

}

2.4 服务调用测试

访问客户端调用接口,截图如下

控制台日志:

c.e.order.controller.OrderController : rest -- 1657182229010:1123:jack:{ aaaa=bbbb, time=1657182229068}

在使用过程中发现想接收ListMapString,Object> > 太麻烦了,还是使用模板的远程调用openfeign了,下文分享。



以上就是关于“SpringCloud中如何实现远程服务调用”的相关知识,感谢各位的阅读,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: SpringCloud中如何实现远程服务调用
本文地址: https://pptw.com/jishu/652417.html
PHP静态方法的特点和优点是什么 Spring Security里怎么实现自定义权限表达式

游客 回复需填写必要信息