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服务发现相关推荐

  1. Spring Cloud Alibaba【Nacos 服务治理】 高可用保证:Nacos 如何有效构建注册中心集群

    上一节我们学习了 Nacos 注册中心的作用以及单点运行的方法,但是单点运行是分布式应用的大忌,在分布式架构中,任何单点都可能成为系统的瓶颈,因此在生产环境中 Nacos 都需要通过部署集群来为系统带 ...

  2. Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式

    文章目录 Pre 实现 方式一 通过 shared-dataids 方式 方式二 通过 ext-config方式 配置文件优先级 源码 Pre Spring Cloud Alibaba - 18 Na ...

  3. Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置

    文章目录 需求 实现 Step 1 Nacos Config 新增公共配置 Step 2 验证 配置文件优先级 源码 需求 举个例子,同一个微服务,通常我们的servlet-context 都是相同的 ...

  4. 用Spring Cloud Alibaba开发微服务会更香吗?

    关注DD,除了前沿消息,还有每周福利哦 Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案,它是Spring Cloud组件被植入Alibaba元素之后的产物. 利用Spri ...

  5. 流量暴增,掌门教育如何基于 Spring Cloud Alibaba 构建微服务体系?

    作者 | 童子龙  掌门教育基础架构部架构师 **导读:**本文整理自作者于 2020 年云原生微服务大会上的分享<掌门教育云原生落地实践>,本文主要介绍了掌门教育云原生落地实践,主要围绕 ...

  6. 进击的 Spring Cloud Alibaba —— 框架与服务

    作者 | 陈曦(良名)  Spring Cloud Alibaba 项目成员,start.aliyun.com 负责人. 导读:本文整理自作者于 2020 年云原生微服务大会上的分享<进击的 S ...

  7. spring cloud Alibaba 的 Nacos学习笔记

    spring cloud Alibaba 的 Nacos学习笔记 文章目录 spring cloud Alibaba 的 Nacos学习笔记 下载nacos spring cloud Alibaba依 ...

  8. Spring Cloud Alibaba 新一代微服务解决方案

    本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇, 每期文章会在公众号「架构进化论」进行首发更新,欢迎关注. 1.Spring Cloud Alibaba 是什么 Spring ...

  9. 【Spring Cloud Alibaba】Gateway 服务网关

    [Spring Cloud Alibaba]Gateway 服务网关 1 架构图 2 Predicate 断言 3 路由 3.1 静态路由 3.2 动态路由 3.3 Nacos 配置 4 过滤器 4. ...

最新文章

  1. pytorch Flatten展平
  2. boost::graph模块实现分布式压缩稀疏行图类型的测试
  3. 04_面向初学者的快速入门、建立图像分类的一个神经网络、训练这个神经网络、评估模型的精确度
  4. Idea单测执行报错“Command line is too long“ 解决办法
  5. 关于JWT的一些攻击方法
  6. yii2之DetailView小部件
  7. mysql 传输表空间_Oracle传输表空间总结
  8. Android SQLite数据库升级的问题
  9. 无传感FOC控制中的转子位置和速度确定方法一
  10. 黄聪:C#中用ILMerge将所有引用的DLL和exe文件打成一个exe文件,有图解
  11. 阿里云物联网平台物模型SDK试用
  12. 类、匿名类、静态、构造、单例
  13. Navicat Premium 12 安装教程 + 注册机 Navicat_Keygen_Patch_v5.0_By_DFoX_CHS [附资源]
  14. 珍藏30年的网站都在这了,自媒体运营必不可少
  15. PayPal提现银行不给入账要退回?最新解决方法如下!!!
  16. 【数据库设计-2】权限设计-系统登录用户权限设计
  17. u深度重装系统详细教程_u深度u盘启动盘安装win7详细步骤
  18. 人工智能期末复习:聚类(详细笔记)
  19. linux下查看手机芯片,如何查看手机闪存型号
  20. 在Jetson Nano上十行代码实现目标检测(jetson_inference)

热门文章

  1. 计算机组成原理实验2总线,计算机组成原理实验 2.1 总线与寄存器 赖晓铮.ppt
  2. 全面掌握移动端主流图片格式的特点、性能、调优等
  3. python统计excel中出现次数_使用pythonxlrd统计Excel表中特定单词的出现次数
  4. 题目0167-开心消消乐
  5. python--别踩白块python代码
  6. gprMax电磁波正演模拟方法
  7. HashMap为啥要二次Hash
  8. 【CAD3D】0基础绘制立体模型
  9. 自己动手,编写神经网络程序
  10. 7.Flutter教程 — 基础组件综合实例