Spring Cloud alibaba 使用Nacos服务发现
admin
2024-05-02 23:07:12
0

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配置


4.0.0org.exampleCloudConsumer1.0-SNAPSHOTCloudConsumerUTF-8UTF-81.82021.0.42021.0.4.0org.springframework.bootspring-boot-starter-parent2.6.11org.springframework.cloudspring-cloud-dependencies${spring.cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring.cloud.alibaba.version}pomimportcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configorg.springframework.cloudspring-cloud-starter-loadbalancerorg.springframework.cloudspring-cloud-starter-bootstraporg.springframework.bootspring-boot-starter-testtestjunitjunittestorg.springframework.bootspring-boot-starter-weborg.projectlomboklombokdevdevtruetesttestprepreprodprodorg.springframework.bootspring-boot-maven-plugin${build.name}src/main/resourcestruemapper/**/*.xmlapplication.propertiesapplication-${profileActive}.propertiesbootstrap.propertieslogback-spring.xml

跟我们的前篇的引用是差不多的,多了个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 学习)

相关内容

热门资讯

原创 纪... 最近,韩国模特云希在她的社交媒体上发布了一系列充满度假氛围的照片,背景明显是在她的故乡——韩国。而让...
医学生需要学习高数吗? 医学生需要学习高数吗?需要的。成为医学生的前提,必须是理科生,大部分原因是理科生更为严谨。高数不仅仅...
有很多动漫作品被禁播,这是为什... 有很多动漫作品被禁播,这是为什么?有些曾看过的动漫被禁播,这是为何?因为不符合我们国内的要求,可能有...
奉献爱心的成语 奉献爱心的成语春风送暖 体贴入微 无微不至 雪中送炭关怀备至嘘寒问暖
安徒生在1827年发表过《垂死... 安徒生在1827年发表过《垂死的小孩》这篇文章吗问一下、帮帮忙!《垂死的小孩》是一首诗,是安徒生18...
跆拳道比赛的进攻技术是怎样的? 跆拳道比赛的进攻技术是怎样的?跆拳道比赛的进攻技术跆拳道比赛的进攻技术包括拳攻和踢法进攻两类。现代竞...
本人书荒,求几本书 本人书荒,求几本书我最近在看紫玉钗街诡怪传说。我觉得还不错
情玫公寓和紫色蜜桃哪个更加好 ... 情玫公寓和紫色蜜桃哪个更加好 会不会有什么问题 里面的女的是不是都是莫须有的都是骗人的,想骗取你的钱...
求一早期的动画片名称,每集一个... 求一早期的动画片名称,每集一个单独故事,似乎是世界怪异故事集还有一组头发的女主人公为了买礼物的演员卖...
无双大蛇各武将的终极武器是什么... 无双大蛇各武将的终极武器是什么名字?正在收集终极武器,已经弄到赵云.周泰.织田信长的.其他武将的终极...
你觉得,你们遇到最无奈的时候,... 你觉得,你们遇到最无奈的时候,是什么时候?一个男人最无奈的时候就是在最没能力的时候遇到最想照顾的人,...
我们常把那些对事物只有一知半解... 我们常把那些对事物只有一知半解却喜欢在人前卖弄的人叫做什么哦,这种人我们这里叫半吊子,就是半瓶醋,一...
砸锅卖铁去上学谁是背后反派 砸锅卖铁去上学谁是背后反派 肖伊莱。《砸锅卖铁去上学》是由奇迹文学城作者红刺北写作的一篇女强爽文...
为什么让我漩涡中挣脱 为什么让我漩涡中挣脱这个还是你自己的心理的想法,想开,自然好了
苍山洱海的任务从哪儿开始做啊 苍山洱海的任务从哪儿开始做啊从地图的右上方莫雨少爷开始任务。地图北边路口
如果你可以选择自己的人生道路,... 如果你可以选择自己的人生道路,你会如何抉择?我会选择从初中就开始奋斗的一种人生道路,不过是那种见过世...
哪种五笔好? 哪种五笔好?用万能五笔啊功能更强大!五笔加加 搜狗呵呵,建议你使用极点五笔。。。。敲一下空格,能切换...
为什么和陈伟霆一样帅的人 总是... 为什么和陈伟霆一样帅的人 总是被女生盯着看?反而女生不敢和他说话爱美之心人皆有之啊和陈伟霆一样帅的人...
算命能不能改命 算命能不能改命算命的不能够改命,你没听说过有一句话吗,三分天注定,七分靠打拼,也就是说有三分就是靠天...
谁知道赛尔号怎么进入夜魔古堡 谁知道赛尔号怎么进入夜魔古堡登录赛尔号,打开左上角的航行日志,选择右侧栏第一个圣甲永夜,再点击图中间...