您好,登录后才能下订单哦!
今天小编给大家分享一下Spring Cloud Alibaba整合Nacos使用的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
近些年,随着微服务框架在越来越多的公司产品中实践落地,以Spring Cloud Alibaba为导向的一站式微服务解决方案也成为微服务实践和运用的风向标,Spring Cloud Alibaba提供了越来越完善的各类微服务治理组件,比如分布式服务配置与注册中心nacos,服务限流、熔断组件sentinel等。
为什么需要注册中心呢?简单来说,随着微服务的个数增多,规模增大,再向以往那样,两个微服务之间直接通过拼接完整的请求url调用的话,微服务的维护成本将是巨大的,也不便于后续微服务的API统一治理。
事实上,微服务化的目的就是为了减少服务间的紧密耦合,同时,一定程度上减少服务与服务之间调用时更多的信息暴露,更直接点来说,就是说服务与服务之间的调用应该是去中心化的调用,而注册中心的好处就是为了达到此目的,注册中心提供了一种服务与服务之间互相发现的机制,通过注册中心,微服务提供的各类服务资源可以被统一纳管,进行集中式管理,这就是注册中心的好处。
下面是dubbo核心的经典的服务注册与调用示意图,其服务治理的核心就是注册中心:Registry的存在。
下图列举了常用的几种分布式配置中心各个功能的对比,其他更多的配置中心,像eureka,zk,consul等也是可以使用的,具体可结合实际场景进行选择;
从上面的表的数据对比来看,springcloud alibaba为了更好的治理和打造自身的微服务生态体系,最终选择了自研的nacos,nacos即是分布式服务注册中心,同时也可以作为分布式配置中心使用,而且基于界面可视化操作客户端,提供了完善的治理方案。
一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。
nacos的主要特点如下:
服务发现和服务健康监测;
动态配置服务;
动态 DNS 服务;
服务及其元数据管理;
简而言之
nacos 用于管理所有微服务、解决微服务之间调用关系错综复杂、难以维护的问题;
下图详细介绍了nacos的生态,优势,业务,架构等多维度的全景图,由此可见,作为springcloud-alibaba微服务生态体系下的一款组件,其位置是非常重要的。
nacos在单机环境下安装部署非常简单,只需要下载好安装包之后,执行bin目录下的启动脚本即可快速启动服务,下面是完整的流程。
也可以根据自身的需要选择合适的版本下载使用。
选择完版本后,可以选择linux或者windows环境的安装包下载即可;
这里选择了zip压缩包
nacos启动脚本里面提供了集群模式和单机模式启动两种方式,由于本机搭建使用,选用单机模式即可,修改启动脚本中如下的关键参数;
修改并保存脚本之后,双击启动服务
启动成功之后,按上图中地址访问nacos的客户端控制台,默认登录用户名和密码:nacos/nacos
登录成功后,看到如下的控制台界面;
在真正进行代码整合之前,一定要弄清springloud alibaba版本选择的事情,很多同学在这里由于没弄清springloud alibaba与springboot的版本依赖,兼容性导致在整合过程中遇到较多的问题;
下面摘取git中关于各个版本选型的详细对照,git地址:各版本依赖关系地址,最重要的就是springboot的版本与Spring Cloud Alibaba 版本的依赖关系;
需求说明
1、创建两个微服务,order(订单)微服务,和stock(库存)微服务;
2、将两个微服务注册到nacos,通过nacos实现order服务对stock服务的调用;
有更多需要管理的jar,统一在dependencyManagement中加入即可;
<!-- 统一管理jar包版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <log4j.version>1.2.17</log4j.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
这里暂时只需要导入springboot-web以及nacos的客户端即可;
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos-config 配置中心-自带动态刷新--> <!--<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>--> <!--nacos-discovery 注册中心-服务发现与注册--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
stock模块配置文件
server: port: 8085 spring: application: name: stock-service cloud: nacos: discovery: server-addr: localhost:8848 #服务注册中心地址 #config: #server-addr: localhost:8848 #配置中心地址
order模块配置文件
server: port: 8083 spring: application: name: order-service cloud: nacos: discovery: server-addr: localhost:8848 #服务注册中心地址 #config: #server-addr: localhost:8848 #配置中心地址 service-url: nacos-user-service: http://stock-service
在stock模块中添加一个扣减库存的接口,给下单接口使用
@RestController @RequestMapping("/stock") public class StockController { @GetMapping("/reduct") public String reduct(){ System.out.println("扣减库存"); return "扣减库存"; } }
@RestController @RequestMapping("/order") public class OrderController { @Autowired RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; //localhost:8083/order/add @GetMapping("/add") public String add(){ System.out.println("下单成功"); //String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class); String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class); System.out.println(forObject); return "add order :" + forObject; } }
两个模块的启动类上面都加上@EnableDiscoveryClient 注解
@SpringBootApplication @EnableDiscoveryClient public class OrderApp { public static void main(String[] args) { SpringApplication.run(OrderApp.class,args); } }
由于spring-cloud-starter-alibaba-nacos-discovery默认集成的是Ribbon,我们知道Ribbon是基于客户端的负载均衡实现,所以这里的LoadBalancerClient的实现类是RibbonLoadBalancerClient,由Ribbon实现对RestTemplate的负载均衡,在当前的两个工程模块中,order作为客户端,所以需要在order模块中添加一个RestTemplate的配置类,并使用LoadBalanced注解进行修饰;
@Configuration public class RestConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
启动nacos,然后依次启动stock服务,order服务,在工程启动的时候,注意下面的关键信息,说明服务注册到了nacos;
启动完成之后,再次检查nacos的服务列表,可以发现上面正是两个工程的服务名;
浏览器调用order模块的下单接口:localhost:8083/order/add,看到如下效果,说明通过nacos实现对微服务的调用就成功了
以上就是“Spring Cloud Alibaba整合Nacos使用的方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。