Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。

nacos的安装(windows和liunx的单机和集群)

https://blog.csdn.net/wangyunzhao007/article/details/106872831

nacos的配置中心

配置中心,顾名思义,就是我们可以把我们的配置都放置在nacos。

启动nacos后,我们输入地址http://127.0.0.1:8848/nacos/,账号和密码都是nacos。

点击配置列表,然后点击右边的加号,我们会看到下图,我们可以吧我们的配置文件写到下图,还可以选择不同的样式。

以yaml为例子,我写了一个简单的配置,data ID的名字不是随便命名的,pro代表profiles.profiles

这样就弄好一个配置了,接下怎么使用呢。

1.引入的pom依赖

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

2.测试接口:这个用到我们刚刚配置好的mayikt.name

package com.mayikt.service;import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope
@SpringBootApplication
public class NacosController {@Value("${mayikt.name}")private String userName;@RequestMapping("/getConfig")public String getConfig() {return userName;}}

3.添加启动项

@SpringBootApplication
@RefreshScope  //加上这个注解才能动态的刷新nacos配置文件的值
public class AppNacosClient {public static void main(String[] args) {SpringApplication.run(AppNacosClient.class);}
}

4.写bootstrap.yml

spring:application:###服务的名称name: mayikt-nacos-clientcloud:nacos:discovery:###nacos注册地址server-addr: 127.0.0.1:8848enabled: trueconfig:###配置中心连接地址server-addr: 127.0.0.1:8848###分组group: DEFAULT_GROUP###类型file-extension: yamlprofiles:C: pro

然后调用测试接口:得到了配置文件的信息。

nacos的服务注册和发现

新建一个父工程,下面有两个子工程,

父工程的pom依赖,子工程不需要

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><dependencies><!--  springboot 整合web组件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>0.2.2.RELEASE</version></dependency></dependencies>

服务的注册方 member

接口:

@RestController
public class MemberService {@Value("${server.port}")private String serverPort;@GetMapping("/getUser")public String getUser(Integer userId){return "hello world!端口号为" + serverPort;}
}

启动项

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

application.yml

spring:application:###服务名称name: meitemk-membercloud:nacos:discovery:###注册地址server-addr: 127.0.0.1:8848
server:port: 8081

服务的发现或使用方

接口:不同的获取服务的方法和负载均衡实现

package com.mayimk.service;import com.mayimk.loadbalance.LoadBalancer;
import com.sun.jndi.toolkit.url.Uri;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.context.annotation.Primary;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.net.URI;
import java.util.List;
@RestController
public class OrderService1 {@Autowiredprivate DiscoveryClient discoveryClient;@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancer loadBalancer;@Autowiredprivate LoadBalancerClient loadBalancerClient;@RequestMapping("/orderToMeber1")public Object orderToMeber(){//1.根据服务名称从注册中心获取集群列表地址List<ServiceInstance> instances = discoveryClient.getInstances("meitemk-member");//2.列表中任意选取一个,实现本地的rpc调用  采用负载均衡算法实现ServiceInstance serviceInstance = loadBalancer.getSingleAddres(instances);URI recMemberUrl = serviceInstance.getUri();String result = restTemplate.getForObject(recMemberUrl +"/getUser", String.class);System.out.println(serviceInstance.getPort());return "订单调用返回结果:"+ result;}//使用rabbion实现负载均衡@RequestMapping("/orderToRibbonMeber")public Object orderToRibbonMeber(){String result = restTemplate.getForObject("http://meitemk-member/getUser", String.class);return "订单调用返回结果:"+ result;}/**** @return*///cloud根据服务id实现负载均衡@RequestMapping("/loadBalanceClientvMember")public Object LoadBalanceClientvMember(){ServiceInstance result = loadBalancerClient.choose("meitemk-member");return result;}
}

本地负载均衡策略需要的代码:

package com.mayimk.loadbalance;import org.springframework.cloud.client.ServiceInstance;import java.util.List;public interface LoadBalancer {/*** 从注册中心集群列表中获取单个地址* @param serviceInstances* @return*/ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances);
}
package com.mayimk.loadbalance;import org.springframework.cloud.client.ServiceInstance;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;@Component
public class RotationLoadBalancer implements LoadBalancer {private AtomicInteger atomicInteger = new AtomicInteger(0);@Overridepublic ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances) {//从零开始计数int index = atomicInteger.incrementAndGet() % serviceInstances.size();ServiceInstance serviceInstance = serviceInstances.get(index);return serviceInstance;}
}

启动项

@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class);}/*** 加上@LoadBalanced,注解就可以实现我们本地的负载均衡* @return*/@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

application.yml

spring:application:###服务名称name: meitemk-ordercloud:nacos:discovery:###注册地址server-addr: 127.0.0.1:8848
server:port: 8082

然后我们启动两个子项目,然后修改member的端口号,将member再次启动,就会有两个不同端口号member。

我们可以看到nacos的服务列表中油member的服务实例有两个,然后order也注册到这里,也拉取了服务。我们可以调用order中的接口,接口调用了member中getUser接口,同时使用了负载均衡。

测试其中使用了rabbin方式的负载均衡,测试结果如下:

 、

代码资源下载地址:

https://download.csdn.net/download/wangyunzhao007/12540939

【alibaba-cloud】nacos详解相关推荐

  1. Alibaba之Nacos详解

    本文为转载文章,原文作者:Wind Mt 原文链接:https://windmt.com/2018/11/09/intro-to-spring-cloud-alibaba-nacos/ 上个月最后一天 ...

  2. java.lang.IllegalStateException: Error processing condition on com.alibaba.cloud.nacos.discovery.rea

    ERROR: java.lang.IllegalStateException: Error processing condition on com.alibaba.cloud.nacos.discov ...

  3. nacos 配置不会动态刷新_Alibaba之Nacos详解

    文章来源: https://blog.csdn.net/weixin_43322048/article/details/107745944 一.介绍 Nacos是阿里巴巴最新开源的项目,核心定位是&q ...

  4. 十、SpringCloud + Alibaba 全家桶详解(目前公司最新技术)

    点击下载完整脑图https://kejizhentan.lanzouj.com/ixYBO068xjhe 一. SpringBoot2.X版和SpringCloud H版 1. SpringBoot和 ...

  5. Spring Boot加密配置属性--Spring Cloud Vault详解

    项目中敏感配置信息一般需要进行加密处理,比如数据库密码,Spring Boot内置不提供加密支持,不能加密配置文件信息,在官方文档中提供了自定义Environment和Spring Cloud Vau ...

  6. Spring cloud gateway 详解和配置使用

    spring cloud gateway 介绍 1. 网关是怎么演化来的 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 注:图片来自网络 2. 网关的基本功能 网关核心功能是路 ...

  7. java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解

    我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 从上图可以看出 ...

  8. java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解...

    我们从整体上来看一下Spring Cloud各个组件如何来配套使用:  从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构. 其中Eureka负责服务的注册与发现, ...

  9. Spring Cloud原理详解

    概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...

最新文章

  1. 使用SqlBulkCopy进行数据大批量的迁移
  2. 数据访问与sql语句的管理(一)
  3. c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)
  4. oracle10g自带的公共同义词,Oracle10g实战教程第07讲视图、同义词、序列
  5. 关键词之间用分号_如何选择关键词?快看这几个要点
  6. 动手拆解众筹明星产品安全智能锁KeyWe后,发现它不安全且无解
  7. 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
  8. 拓端tecdat|R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风
  9. H+ Hplus html解决contabs.js未加载完毕时 点击会跳转至菜单框架外的bug
  10. Linux教程+操作系统教程
  11. flash cs4 无法调试
  12. arduino 有源 蜂鸣器_Arduino 入门到精通 蜂鸣器发声
  13. LogViewer_2
  14. SPSS对数据进行相关性和显著性分析
  15. python symbols函数_Python应用 | 求解微积分!
  16. 服务器vga转hdmi显示器不亮,手把手教你排除HDMI转VGA常见故障
  17. 预见2020下半场——从自动驾驶新趋势看普及前景
  18. 「文末送书」如何让数据分析不脱离业务?
  19. list index out of range错误
  20. python:matplotlib基础(2)

热门文章

  1. 得到 ip/掩码 的起始结束地址
  2. 后门BROOTKIT代码学习和原理分析
  3. iconv文件编码判断转换
  4. 我的VC++——对话框中显示GIF格式的图片
  5. WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程
  6. 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)
  7. Android开发--XML文件解析
  8. 浅谈 Linux 内核开发之网络设备驱动
  9. SQL How to get the current day month and year
  10. java dh密钥交换_java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换