ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20.SpringCloudAlibaba Nacos(服务注册于配置中心)

2022-05-29 18:01:24  阅读:178  来源: 互联网

标签:20 spring Nacos nacos 服务 alibaba SpringCloudAlibaba id cloud


Nacos:前四个字母分别是Naming和Configuration的前两个字母,最后的s是Service
是什么呢?
   一个更易于构建云原生的动态服务发现、配置管理和服务管理平台

Nacos就是注册中心+配置中心的结合
    等价于 Nacos=Eureka(服务注册中心)+Config(服务配置中心)+Bus(服务总线)

1.Nacos的下载安装

下载安装参考网上
安装成功后,登录:http://192.168.2.129:8848/nacos出现下面页面
默认登录账号和密码:nacos/nacos

2.Nacos服务端和客户端搭建

1.参考官网:https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html
步骤:
    1.在父项目中引入:
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
    
    2.创建两个服务提供端,代码都一样,只是端口分别为9001/9002
        2.1 pom文件中引入的特别除:
            1:引入nacos
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            2.引入web
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            3.引入监控
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        2.2在application.yml中的配置
            server:
              port: 9001
            spring:
              application:
                name: nacos-person-provider
              #重点1:绑定nacos的地址
              cloud:
                nacos:
                  discovery:
                    server-addr: 192.168.2.129:8848
            #重点2:暴露所有端点
            management:
              endpoints:
                web:
                  exposure:
                    include: '*'
        2.3 控制层代码,提供生成uuid的方法
            @RestController
            public class PersonController {
                重点1:获取服务端口,因为有两个服务端,为后面演示的负载均衡做准备
                @Value("${server.port}")
                private int serverPort;
                @GetMapping("/provider/getUUid/{id}")
                public String getUUID(@PathVariable("id") int id){
                    return "alibaba服务提供端-->请求id:"+id+"  UUID:"+ IdUtil.simpleUUID()+" 服务端口:"+serverPort;
                }
            }
        2.4 启动类代码:
            @SpringBootApplication
            重点1:加上@EnableDiscoveryClient注解:让注册中心可以发现该服务,扫描到该服务
            @EnableDiscoveryClient
            public class AlibabaPersonProviderApplication9002 {
                public static void main(String[] args) {
                        SpringApplication.run(AlibabaPersonProviderApplication9002.class, args);
                    }
            }
    
    
    3.服务调用端代码:
        3.1 pom文件的内容:
            1:引入nacos
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            2.引入web
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            3.引入监控
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        3.2 由下图知,spring-cloud-starter-alibaba-nacos-discovery包中包含有netflix的ribbon,所以肯定支持负载均衡和restTemplate远程请求

3.3 config配置类代码:
            @Configuration
            public class Myconfig {
                重点1:容器中加入RestTemplate组件,并使用@LoadBalanced注解,使进行轮训的负载均衡
                @Bean
                @LoadBalanced
                public RestTemplate getRestTemplate(){
                    return new RestTemplate();
                }
            }
        
        3.4applicaiton.yml配置文件代码:
            server:
              port: 81
            spring:
              application:
                name: nacos-person-consumer
              #重点1:绑定nacos的地址
              cloud:
                nacos:
                  discovery:
                    server-addr: 192.168.2.129:8848
            重点2:自定义个key,值是服务注册中心中服务提供端的名称,即服务提供端的spring.appliaciton.name
            server-url:
              nacos-user-service: http://nacos-person-provider
        3.4 控制层代码
            @RestController
            public class PersonConsumerController {
                重点1:获取RestTemplate对象
                @Resource
                private RestTemplate restTemplate;
                重点2:获取远程服务的nacos地址,从配置文件中获取,做到配置和代码分离
                @Value("${server-url.nacos-user-service}")
                private  String uri;
                @GetMapping("/consumer/getUUID/{id}")
                public String getUUId(@PathVariable("id") int id){
                    return restTemplate.getForObject(uri+"/provider/getUUid/"+id,String.class);
                }
            }
            
测试:当浏览器输入客户端请求:http://localhost:81/consumer/getUUID/5时
页面轮询出现:发现端口轮询,即两个服务提供端轮询提供服务
    alibaba服务提供端-->请求id:5 UUID:5440c99cb2624e37979c5fe2700bee70 服务端口:9001
    alibaba服务提供端-->请求id:5 UUID:d2151e99b0154fd1ac469c72a961f773 服务端口:9002
    ..

 

标签:20,spring,Nacos,nacos,服务,alibaba,SpringCloudAlibaba,id,cloud
来源: https://www.cnblogs.com/wmd-l/p/16324412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有