Spring Cloud alibaba 使用Nacos服务发现
Provider 服务端
服务端我们复用前篇Spring Cloud alibaba 使用Nacos配置中心的代码
修改启动类
在启动类上添加@EnableDiscoveryClient 注解 开启服务注册发现功能
package com.yyoo.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication(scanBasePackages = {"com.yyoo"})
@EnableDiscoveryClient // 开启服务注册发现功能
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
就此我们的服务端就已经完成了。我们后续的示例会用到前篇示例中的TestController
在application.properties配置中添加如下配置
# 当前应用的访问端口
server.port=8702
# 当前应用的访问上下文
server.servlet.context-path=/myCloud
# 当前服务名称
spring.application.name=myCloudConsumer# 配置Nacos注册中心
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 不配置默认是${spring.application.name}的值
spring.cloud.nacos.discovery.service=myCloudConsumer
Consumer消费端
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>CloudConsumer</artifactId><version>1.0-SNAPSHOT</version><properties><build.name>CloudConsumer</build.name><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring.cloud.version>2021.0.4</spring.cloud.version><spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 使用Nacos服务注册与发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 使用Nacos配置管理 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- 使用spring-cloud-starter-loadbalancer做负载均衡 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><!-- 支持读取bootstrap配置 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><!-- 添加web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><profiles><profile><id>dev</id><properties><profileActive>dev</profileActive></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profileActive>test</profileActive></properties></profile><profile><id>pre</id><properties><profileActive>pre</profileActive></properties></profile><profile><id>prod</id><properties><profileActive>prod</profileActive></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><finalName>${build.name}</finalName><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>mapper/**/*.xml</include><include>application.properties</include><include>application-${profileActive}.properties</include><include>bootstrap.properties</include><include>logback-spring.xml</include></includes></resource></resources></build></project>
跟我们的前篇的引用是差不多的,多了个spring-cloud-starter-loadbalancer的引用而已,因为我们的Consumer会用到,负载均衡我们会在后续详细介绍
老版本的Spring Cloud以及其相关组件如Feign、openFeign等都默认使用ribbon做负载均衡组件,但是ribbon已经停止更新,所以spring官方推出了spring-cloud-starter-loadbalancer来作为替代。
配置RestTemplate
package com.yyoo.cloud.conf;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ConsumerConf {@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
@LoadBalanced 自动为RestTemplate设置负载均衡策略。这个我们后续再讲。
测试ConsumerController
package com.yyoo.cloud.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
@RequestMapping("consumer")
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/getMyCloudConf")public String getMyCloudConf(){return restTemplate.getForObject("http://myCloud/myCloud/conf/getCommonConf",String.class);}}
注:示例中有两个myCloud,前一个myCloud是我们的Provider的服务名(spring.cloud.nacos.discovery.service),后一个myCloud是我们的Provider的上下文,请注意区分
这里为什么不用127.0.0.1:8701/myCloud/conf/getCommonConf来访问呢?这样不就跟我们没有使用Cloud一样了嘛,直接http调用。这里使用服务名来调用,就会使用我们导入的负载均衡,此时如果有多个Provider,最后其调用的Provider会根据我们的负载均衡策略来执行。
另一种示例写法
配置RestTemplate
@Configuration
public class ConsumerConf {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
注意:没有@LoadBalanced注解
测试ConsumerController
package com.yyoo.cloud.controller;import org.springframework.beans.factory.annotation.Autowired;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
@RequestMapping("consumer")
public class ConsumerController {@Autowiredprivate LoadBalancerClient loadBalancerClient;@Autowiredprivate RestTemplate restTemplate;@GetMapping("/getMyCloudConf")public String getMyCloudConf(){//使用 LoadBalanceClient 和 RestTemplate 结合的方式来访问ServiceInstance serviceInstance = loadBalancerClient.choose("myCloud");String url = String.format("http://%s:%s/myCloud/conf/getCommonConf",serviceInstance.getHost(),serviceInstance.getPort());System.out.println("request url:"+url);return restTemplate.getForObject(url,String.class);}}
此写法我们直接使用了LoadBalancerClient 接口,spring-cloud-starter-loadbalancer中有其实现类,并且已经自动配置了,不用像RestTemplate一样需要自行配置。
执行结果
以上两种写法,访问 http://localhost:8702/myCloud/consumer/getMyCloudConf 链接都能得到最终的结果:
CommonConf(name=没事儿写两篇, age=12, desc=Spring Cloud 学习)
Spring Cloud alibaba 使用Nacos服务发现相关推荐
- Spring Cloud Alibaba【Nacos 服务治理】 高可用保证:Nacos 如何有效构建注册中心集群
上一节我们学习了 Nacos 注册中心的作用以及单点运行的方法,但是单点运行是分布式应用的大忌,在分布式架构中,任何单点都可能成为系统的瓶颈,因此在生产环境中 Nacos 都需要通过部署集群来为系统带 ...
- Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
文章目录 Pre 实现 方式一 通过 shared-dataids 方式 方式二 通过 ext-config方式 配置文件优先级 源码 Pre Spring Cloud Alibaba - 18 Na ...
- Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
文章目录 需求 实现 Step 1 Nacos Config 新增公共配置 Step 2 验证 配置文件优先级 源码 需求 举个例子,同一个微服务,通常我们的servlet-context 都是相同的 ...
- 用Spring Cloud Alibaba开发微服务会更香吗?
关注DD,除了前沿消息,还有每周福利哦 Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案,它是Spring Cloud组件被植入Alibaba元素之后的产物. 利用Spri ...
- 流量暴增,掌门教育如何基于 Spring Cloud Alibaba 构建微服务体系?
作者 | 童子龙 掌门教育基础架构部架构师 **导读:**本文整理自作者于 2020 年云原生微服务大会上的分享<掌门教育云原生落地实践>,本文主要介绍了掌门教育云原生落地实践,主要围绕 ...
- 进击的 Spring Cloud Alibaba —— 框架与服务
作者 | 陈曦(良名) Spring Cloud Alibaba 项目成员,start.aliyun.com 负责人. 导读:本文整理自作者于 2020 年云原生微服务大会上的分享<进击的 S ...
- spring cloud Alibaba 的 Nacos学习笔记
spring cloud Alibaba 的 Nacos学习笔记 文章目录 spring cloud Alibaba 的 Nacos学习笔记 下载nacos spring cloud Alibaba依 ...
- Spring Cloud Alibaba 新一代微服务解决方案
本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇, 每期文章会在公众号「架构进化论」进行首发更新,欢迎关注. 1.Spring Cloud Alibaba 是什么 Spring ...
- 【Spring Cloud Alibaba】Gateway 服务网关
[Spring Cloud Alibaba]Gateway 服务网关 1 架构图 2 Predicate 断言 3 路由 3.1 静态路由 3.2 动态路由 3.3 Nacos 配置 4 过滤器 4. ...
最新文章
- pytorch Flatten展平
- boost::graph模块实现分布式压缩稀疏行图类型的测试
- 04_面向初学者的快速入门、建立图像分类的一个神经网络、训练这个神经网络、评估模型的精确度
- Idea单测执行报错“Command line is too long“ 解决办法
- 关于JWT的一些攻击方法
- yii2之DetailView小部件
- mysql 传输表空间_Oracle传输表空间总结
- Android SQLite数据库升级的问题
- 无传感FOC控制中的转子位置和速度确定方法一
- 黄聪:C#中用ILMerge将所有引用的DLL和exe文件打成一个exe文件,有图解
- 阿里云物联网平台物模型SDK试用
- 类、匿名类、静态、构造、单例
- Navicat Premium 12 安装教程 + 注册机 Navicat_Keygen_Patch_v5.0_By_DFoX_CHS [附资源]
- 珍藏30年的网站都在这了,自媒体运营必不可少
- PayPal提现银行不给入账要退回?最新解决方法如下!!!
- 【数据库设计-2】权限设计-系统登录用户权限设计
- u深度重装系统详细教程_u深度u盘启动盘安装win7详细步骤
- 人工智能期末复习:聚类(详细笔记)
- linux下查看手机芯片,如何查看手机闪存型号
- 在Jetson Nano上十行代码实现目标检测(jetson_inference)