Spring Cloud Alibaba基础教程-Nacos(三)

Spring Cloud Alibaba基础教程-Nacos(二)当中学习了,如何使用 nacos图形化界面操作 ,使用Nacos部署集群,下面我们开始Nacos最后一篇的学习 ,如果对你有帮助,记得点个关注

前置条件

首先 你已经拥有Nacos的基础知识
搭建前环境 可以参考

本文需要实现:

通过一个简单的示例来感受一下如何将服务注册到 Nacos的区别

  • alibaba-provider-server(生产者), alibaba-consumer-client(消费者) 环境搭建
  • 生产者/消费者 把服务注册到nacos 注册中心
  • 通过RestTemplate 模块,消费者PRC的方式 调用生产者
  • 手写 负载均衡器 LoadBalancer (不建议使用)
  • 使用 负载均衡器 Rabbit

在这里插入图片描述

创建Maven 项目 alibaba-provider-server( 版本2.0.1)

创建一个工程名为 alibaba-provider-server 的服务提供者项目,pom.xml 配置如下:


        <!--  springboot 整合web组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- springboot 整合 alibaba-nacos-discovery 注册中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>


yml 文件配置

server:
  port: 8081
spring:
  application:
    ## 服务名称
    name: alibaba-provider-server
  cloud:
    nacos:
      discovery:
        ## 服务注册地址
        server-addr: 192.168.100.22:8848
management:
  endpoints:
    web:
      exposure:
        include: "*"

启动类

通过 @EnableDiscoveryClient 注解表明是一个 Nacos 客户端,该注解是 Spring Cloud 提供的原生注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

    @RestController
    public class EchoController {
        @GetMapping(value = "/echo/{message}")
        public String echo(@PathVariable String message) {
            return "Hello Nacos Discovery " + message;
        }



    @GetMapping("/getUserId")
    public String getUserId(String userId){
         return  "userId:"+userId;
    }
    }

启动工程

通过浏览器访问 http://192.168.100.22:8848/nacos,即 Nacos Server 网址

在这里插入图片描述你会发现一个服务已经注册在服务中了,服务名为 nacos-provider

这时打开 http://localhost:8081/echo/hi ,你会在浏览器上看到:

Hello Nacos Discovery hi

扫描二维码关注公众号,回复: 9506648 查看本文章

服务的端点检查

使用 前需要导入,省略版本号,必须是 父pom中声明了

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

spring-cloud-starter-alibaba-nacos-discovery 在实现的时候提供了一个 EndPoint, EndPoint 的访问地址为 http://ip:port/actuator/nacos-discovery。 EndPoint 的信息主要提供了两类:

1、subscribe: 显示了当前有哪些服务订阅者
2、NacosDiscoveryProperties: 显示了当前服务实例关于 Nacos 的基础配置

通过浏览器访问 http://localhost:8081/actuator/nacos-discovery 你会在浏览器上看到:
在这里插入图片描述

创建Maven alibaba-consumer-client

创建一个工程名为 alibaba-consumer-client 的服务提供者项目,pom.xml 配置如下:

        <!--  springboot 整合web组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- springboot 整合 alibaba-nacos-discovery 注册中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>

Yml 配置

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.100.22:8848

server:
  port: 9091

management:
  endpoints:
    web:
      exposure:
        include: "*"

启动类


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }
}

Configuration

创建一个名为 NacosConsumerConfiguration 的 Java 配置类,主要作用是为了注入 RestTemplate

创建一个名为 NacosConsumerConfiguration 的 Java 配置类,主要作用是为了注入 RestTemplate


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class NacosConsumerConfiguration {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

消费者Controller 调用生产者



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class NacosConsumerController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;

	/**
     * rpc 调用工具
     */
    @Autowired
    private RestTemplate restTemplate;

    @Value("${spring.application.name}")
    private String appName;

/**
     * 获取注册中心数据对象
     */
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping(value = "/echo/app/name")
    public String echo() {
        //使用 LoadBalanceClient 和 RestTemplate 结合的方式来访问
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
        String url = String.format("http://%s:%s/echo/%s", serviceInstance.getHost(), serviceInstance.getPort(), appName);
        return restTemplate.getForObject(url, String.class);
    }
}


    @GetMapping("/login")
    public String login(){
       // 通过服务名获取到注册到nacos 的ip+端口地址信息(集群会获取多个)
        List<ServiceInstance> instances = discoveryClient.getInstances("nacos-provider");
        String ipAddr = instances.get(0).getUri().toString();
        String url  = ipAddr+"/getUserId?userId=123456789";
        // rpc 调用
        String result = restTemplate.getForObject(url, String.class);
        System.out.println("调用anacos-provider服务,result:" + result);
        return result;
    }

启动工程

通过浏览器访问 http://192.168.100.22:8848/nacos,即 Nacos Server 网址

你会发现多了一个名为 nacos-consumer 的服务

在这里插入图片描述

这时打开 http://localhost:9091/echo/app/name ,你会在浏览器上看到:

Hello Nacos Discovery nacos-consumer

如果输入 http://127.0.0.1:9091/login,你会在浏览器上看到:

userId : 123456789

服务的端点检查

通过浏览器访问 http://localhost:9091/actuator/nacos-discovery你会在浏览器上看到:

在这里插入图片描述

发布了59 篇原创文章 · 获赞 136 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42897427/article/details/104588334