SpringBoot整合Nacos实现服务发现

Nacos实现服务提供方和服务消费方之间的通信

上篇讲到

  1. 在实际的项目开发中 IP+端口不可能写死
  2. 服务可能部署在云服务器,服务实例的网络地址是动态分配

所以我们采用Nacos可以解决这样的问题
大致流程的理解:每个微服务在启动的时候都会向服务发现中心上报自己的网络位置(IP+端口) 这样 会在服务注册中心形成一个服务注册表,服务注册表是服务发现的核心部分,是包含所有服务实例的网络地址的数据库 服务发现客户端会定期从服务发现中心同步服务注册表,并缓存在客户端 当需要对某服务进行请求时候,服务实例通过该注册表,定位目标服务网络地址,若目标服务存在多个网络地址,则使用负载均衡算法从多个实例中选择出一个 发送请求。

1.1Nacos的安装

nacos的安装大家可以从官网下载 (本人用nacos-server-1.1.3版本)
安装启动成功后,启动如下图:
在这里插入图片描述
可通过浏览器访问 http://127.0.0.1:8848/nacos ,打开如下nacos控制台登录页面:
在这里插入图片描述
使用默认用户名:nacos,默认密码:nacos 登录即可打开主页面。
在这里插入图片描述

至此 Nacos已经安装完成!
接下来要做的就是实现Nacos之间服务的调用

  1. 首先,搭建环境(上篇已有搭建好的工程)
  2. 在nacos-discovery父工程中添加依赖管理
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

分别在服务提供及服务消费工程中添加依赖,此依赖的作用是服务发现

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--服务发现的客户端,1、将自己的地址注册到服务发现中心,2、从服务发现中心获取服务列表-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

服务注册
在服务提供工程中配置nacos服务发现相关的配置:
服务提供:

spring:
  application:
	name: nacos‐restful‐provider
  cloud:
	nacos:
	  discovery:
		server‐addr: 127.0.0.1:8848

启动nacos
启动服务提供
观察nacos服务列表,nacos-restful-provider注册成功
在这里插入图片描述
服务发现
在服务消费工程中配置nacos服务发现相关的配置:
服务消费:

spring:
  application:
	name: nacos‐restful‐consumer
  cloud:
	nacos:
	  discovery:
		server‐addr: 127.0.0.1:8848

修改Controller中远程调用的代码:

@RestController
@ResponseBody
public class RestConsumerController {

    @Autowired
    private HttpServletResponse response;
    //远程调用的IP +端口
    @Value("${provider.address}")
    private String providerAddress;
//    private String inputDate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @GetMapping(value = "/service")
    private String service(){
        RestTemplate restTemplate =new RestTemplate();
        String result = restTemplate.getForObject("http://" + providerAddress + "/service", String.class);
        return "consumer invoke" + result;
    }

    @GetMapping(value = "/service1")
    public String service1(){
        //远程调用
        RestTemplate restTemplate =new RestTemplate();
        服务id即注册中心的中的服务名
        String serverId ="nacos-restful-provider";
        //获取服务的实例
        ServiceInstance serviceInstance = loadBalancerClient.choose(serverId);
        //获取带Http的uri
        URI uri = serviceInstance.getUri();
        //远程调用
        String result = restTemplate.getForObject(uri + "/service", String.class);
        return "consumer invoke1" + result;
    }
}

执行流程:
1、服务提供方将自己注册到服务注册中心
2、服务消费方从注册中心获取服务地址
3、进行远程调用
调用成功如下:
在这里插入图片描述
至此 Nacos的安装、服务提供方和消费方的调用就成功了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值