SpringCloud通过Nacos实现注册中心与远程服务调用详解流程

 更新时间:2022年07月12日 10:36:00   作者:有头发的程序猿!  
如果不满足eureka注册中心,那么本文记录的Nacos是不二之选。本文主要记录Springboot基于Nacos实现注册中心以及远程服务调用

本文主要记录基于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 端口均可从这里面获取到 也可以自己决定调用顺序
        List<ServiceInstance> instances = discoveryClient.getInstances("userservice");
		//get方式调用 
        String template = restTemplate.getForObject("http://userservice/getTime/1123?name=jack", String.class);
        Map<String, Object> resMap = new HashMap<>();
        resMap.put("aaaa", "bbbb");
        //post调用方式
        RequestEntity<Map<String, Object>> requestEntity = RequestEntity
                .post("http://userservice/postTime")
                .contentType(MediaType.APPLICATION_JSON)
                .body(resMap);
        ResponseEntity<Map> 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 Map<String, Object> getTime(@RequestBody Map<String, 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}

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

到此这篇关于SpringCloud通过Nacos实现注册中心与远程服务调用详解流程的文章就介绍到这了,更多相关SpringCloud Nacos注册中心内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java操作压缩包解压过程详解

    Java操作压缩包解压过程详解

    这篇文章主要介绍了Java操作压缩包解压过程,项目开发中,总会遇到解压缩文件的时候,比如用户下载多个文件时,服务端可以将多个文件压缩成一个文件,用户上传资料时,允许上传压缩文件,服务端进行解压读取每一个文件,使用场景是很多的,下面来详细讲解,需要的朋友可以参考下
    2024-10-10
  • Atomikos + MybatisPlus解决多数据源事务一致性问题解决

    Atomikos + MybatisPlus解决多数据源事务一致性问题解决

    在实际项目的开发过程中,我们经常会遇到在同一个项目或微服务中牵涉到使用两个或多个数据源的,本文主要介绍了Atomikos + MybatisPlus解决多数据源事务一致性问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • @RequiredArgsConstructor如何实现构造器注入

    @RequiredArgsConstructor如何实现构造器注入

    这篇文章主要介绍了@RequiredArgsConstructor如何实现构造器注入问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • 一文详解Java线程中的安全策略

    一文详解Java线程中的安全策略

    Java中的线程到底有哪些安全策略呢?这篇文章将详细为大家分析一下。文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-05-05
  • Spring Boot2.x集成JPA快速开发的示例代码

    Spring Boot2.x集成JPA快速开发的示例代码

    这篇文章主要介绍了Spring Boot2.x集成JPA快速开发,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • MyBatis-Plus实现字段自动填充功能的示例

    MyBatis-Plus实现字段自动填充功能的示例

    本文主要介绍了MyBatis-Plus实现字段自动填充功能的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 快速入门HarmonyOS的Java UI框架的教程

    快速入门HarmonyOS的Java UI框架的教程

    这篇文章主要介绍了快速入门HarmonyOS的Java UI框架,本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • gradle项目中资源文件的相对路径打包技巧必看

    gradle项目中资源文件的相对路径打包技巧必看

    这篇文章主要介绍了gradle项目中资源文件的相对路径打包技巧必看篇,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • java跟踪执行的sql语句示例分享

    java跟踪执行的sql语句示例分享

    这篇文章主要介绍了java跟踪执行的sql语句示例分享,需要的朋友可以参考下
    2014-03-03
  • java+io+swing实现学生信息管理系统

    java+io+swing实现学生信息管理系统

    这篇文章主要为大家详细介绍了java+io+swing实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论