SpringCloud学习笔记(三)_服务提供者集群与服务发现Discovery

服务提供者集群

既然SpringCloud的是微服务结构,那么对于同一种服务,当然不可能只有一个节点,需要部署多个节点

架构图如下:

由上可以看出存在多个同一种服务提供者(Service Provider)

搭建服务提供者集群

1、参考:SpringCloud 快速入门搭建单机版的:Eureka Server、Service Provider、Service Consumer

2、根据支付模块服务提供者(test-springcloud-provider-payment8001),在父工程中,同样新建一个支付模块的服务提供者(test-springcloud-provider-payment8002)

服务8001与8002的配置中,除端口外,其他都相同,且spring.application.name应用名称必须相同,表明2个服务是同一种服务

服务8002配置文件如下:

 1 # 端口2 server:3   port: 80024 5 spring:6   application:7     name: cloud-payment-service8   #   数据源基本配置9   datasource:
10     driver-class-name: com.mysql.cj.jdbc.Driver
11     url: jdbc:mysql://localhost:3306/test_springcloud?allowPublicKeyRetrieval=true&useSSL=true
12     username: admin
13     password: 123456
14 
15 eureka:
16   client:
17     # 表示将自己注册进Eureka Server默认为true
18     register-with-eureka: true
19     # 是否从Eureka Server抓去已有的注册信息,默认是true
20     fetch-registry: true
21     # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
22     service-url:
23       defaultZone: http://localhost:8761/eureka
24 
25 mybatis:
26   mapperLocations: classpath:mapper/*Mapper.xml
27   # 所有entity别名类所在的包
28   type-aliases-pachage: com.test.springcloud.entities

View Code

3、重新启动项目,打开Eureka查看,发现有2个支付服务

4、使用订单模块消费者调用支付服务

消费者部分代码模块如下:

 1 @Configuration2 public class AppConfig {3 4     /**5      * 注入restTemplate,请用请求rest接口6      * @return7      */8     @Bean9     // 标注此注解后,RestTemplate就具有了客户端负载均衡能力
10     // 负载均衡技术依赖于的是Ribbon组件~
11     // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力
12     @LoadBalanced
13     public RestTemplate restTemplate(){
14         return new RestTemplate();
15     }
16 }
17 
18 
19 @RestController
20 @Slf4j
21 public class OrderController {
22 
23     public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
24 
25     @Autowired
26     private RestTemplate restTemplate;
27 
28     @GetMapping("/consumer/payment/get/{id}")
29     public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
30         return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
31     }
32 
33     ...
34 }

由上可以,通过配置向容器中注入了RestTemplate对象,而RestTemplate又被标注此@LoadBalanced注解后,RestTemplate就具有了客户端负载均衡能力,也就是说RestTemplate会轮流调用服务的各个节点,到达均衡的目的

5、测试调用,启动项目,使用地址:http://localhost:8000/consumer/payment/get/1,进行访问,可以看到已到达负载均衡的目的

服务发现Discovery

服务发现就是对于注册进eureka里面的微服务,可以通过服务发现获得该服务的信息

案例如下:

1、在微服务中使用@EnableDiscoveryClient注解,启用服务发现

 1 // Eureka客户端2 @EnableEurekaClient3 // 启用服务发现4 @EnableDiscoveryClient5 @SpringBootApplication6 public class PaymentMain8001 {7     public static void main(String[] args) {8         SpringApplication.run(PaymentMain8001.class, args);9     }
10 }

2、编辑Controller,启用服务发现之后,它会自动向容器注入DiscoveryClient(服务发现客户端)

通过调用DiscoveryClient的getServices方法,从注册中心获取服务列表

通过调用DiscoveryClient的getInstances方法,从注册中心获取服务实例集

 1 public class PaymentController {2 3     @Autowired4     private DiscoveryClient discoveryClient;5 6     @GetMapping(value = "/payment/discovery")7     public Object discovery(){8         // 获取服务列表9         List<String> services = discoveryClient.getServices();
10         for (String element : services) {
11             log.info("=====element:" + element);
12         }
13         
14         // 获取服务实例集
15         List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
16         for (ServiceInstance instance : instances) {
17             log.info("服务发现" + "\n"
18                     + "getServiceId === " + instance.getServiceId() + "\n"
19                     + "getHost === " + instance.getHost() + "\n"
20                     + "getPort === " + instance.getPort() + "\n"
21                     + "getUri === " + instance.getUri() );
22         }
23 
24         return  this.discoveryClient;
25     }
26 
27 } 

3、启用服务,使用地址:http://localhost:8001/payment/discovery,进行访问

页面结果:

后台日志:

由上可知,通过DiscoveryClient能获取到注册进eureka里面的微服务信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/50529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第 7 章 排序算法(5)(希尔排序)

7.8希尔排序 7.8.1简单插入排序存在的问题 我们看简单的插入排序可能存在的问题. 数组 arr {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是&#xff1a; {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入的数…

Spring Boot整合RabbitMQ之发布与订阅模式

RabbitMQ的模式中&#xff0c;常用的模式有&#xff1a;简单模式&#xff0c;发布与订阅模式&#xff0c;工作模式&#xff0c;路由模式&#xff0c;主题模式。简单模式不太会运用到工作中&#xff0c;我们可以使用 RabbitMQ 的发布订阅模式&#xff0c;实现&#xff1a; 用户…

android cocoscreator 检测模拟器还是真机

转载至 一行代码帮你检测Android模拟器 具体原理看原博主文章&#xff0c;这里只讲cocoscreator3.6的安卓工程怎么使用 1.新建一个com.lahm.library包&#xff0c;和com.cocos.game同目录&#xff0c;如图示 那四个文件的代码如下&#xff1a; EmulatorCheckUtil类&#…

【Unity】制作一个简单的菜单栏页面并实现其功能

这是一个简单的菜单页面制作&#xff0c;接下来我们将制作一个完整的菜单页面&#xff0c;并且通过一定的代码去实现它对应的效果。这个主要的功能就是我们在游戏中如果想暂停一下或者重新开始&#xff0c;那么就要用到我们这个功能。接下来我们将实现在游戏中按ESC退出键可以调…

Linux Kernel的local_irq_enable()和local_irq_disable()函数

代码如下图所示&#xff0c;最终操作的是msr daifset, #3 和 msr daifclr, #3 寄存器。 (include/linux/irqflags.h) #define local_irq_enable() do { raw_local_irq_enable(); } while (0) #define local_irq_disable() do { raw_local_irq_disable(); } while (0)#define ra…

解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题

如果使用SES调试NRF52840的时候发现&#xff0c;官方例程只能显示CPU寄存器&#xff0c;但是无法显示外设寄存器时&#xff0c;解决办法如下&#xff1a; 1.在解决方案右键→Options→Debug→Debugger&#xff0c;然后Target Device选择正确的型号。 2.Register Definition Fil…

10个最好的云GPU服务

随着深度学习、人工智能和机器学习等新技术的出现&#xff0c;云 GPU 的需求量很大。 GPU&#xff08;图形处理单元&#xff09;是专用处理器&#xff0c;用于处理计算机图形和游戏等活动所需的大量数据集和复杂计算。不过&#xff0c;它们现在对人工智能&#xff08;A.I.&…

【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

文章目录 一、命名空间 namespace1、命名空间基本概念2、名称概念4、C 语言的命名空间3、命名空间避免标识符冲突 二、命名空间定义1、命名空间基本概念2、命名空间定义语法3、代码示例 - 命名空间定义使用 三、命名空间使用1、命名空间默认访问方式2、使用命名空间3、使用默认…

实战项目ssm权限系统 3-总结篇,权限模块保护业务模块

一 工程模块介绍 1.1 工程模块关系 在业务微服务模块中引入安全认证模块&#xff0c;起到对业务模块的认证授权保护

在线设计APP ui的网站,分享这7款

在数字时代&#xff0c;用户界面&#xff08;UI&#xff09;设计变得非常重要&#xff0c;因为良好的UI设计可以改善用户体验&#xff0c;增强产品吸引力。随着科学技术的发展&#xff0c;越来越多的应用在线设计网站出现&#xff0c;为设计师和团队提供了一种新的创作方式。本…

postgresql基于postgis常用空间函数

1、ST_AsGeoJSON 图元转geojson格式 select ST_AsGeoJSON(l.geom) from g_zd l limit 10 2、 ST_Transform 坐标转换 select st_transform(l.shape, 3857) from sde_wf_cyyq l limit 10select st_astext(st_transform(l.shape, 3857)) from sde_wf_cyyq l limit 103、st_aste…

使用动态IP是否会影响网络

今天我们要谈论的话题是关于动态IP和网络的关系。也许有些小伙伴对这个概念还比较陌生&#xff0c;但别担心&#xff0c;我会简单明了的给你理清楚。让我们一起看看动态IP到底能否影响到网络。 首先&#xff0c;我们先来搞明白什么是动态IP。在互联网世界中&#xff0c;每一个连…

【NLP】1、BERT | 双向 transformer 预训练语言模型

文章目录 一、背景二、方法 论文&#xff1a;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 出处&#xff1a;Google 一、背景 在 BERT 之前的语言模型如 GPT 都是单向的模型&#xff0c;但 BERT 认为虽然单向&#xff08;从左到右预测…

WPF中手写地图控件(3)——动态加载地图图片

瓦片增加一个Loading动画 可以查看我的另一个博客WPF中自定义Loading图 从中心扩散 进行从里到外的扩散&#xff0c;方向是上左下右。如下图所示 于是我们可以定义一个拥有坐标X跟Y的集合&#xff0c;他允许这个集合&#xff0c;内部使用枚举器的MoveNext自动排序&#xf…

stm32之5.长按按键(使用时钟源)调整跑马灯速度

------------------------------ 源码 #include <stm32f4xx.h> #include "led.h" #include "delay.h" #include "my_str.h" #include "beep.h" #include "key.h" int main(void) { key_init(); Led_init();…

Ubuntu-Server 22.04安装详细过程-图文版

一.下载Ubuntu Server镜像&#xff0c;官方地址下载即可 https://ubuntu.com/download/server 乌班图镜像网址&#xff0c;点击下载即可 二.安装乌班图镜像&#xff0c;最好自己准备u盘在ISO软件内制作完成 1.选择 Install Ubuntu Server 2.选择安装语言为英语 3.安装程序更新选…

数据库第十五课-------------非关系型数据库----------Redis

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

港联证券|指数或进入磨底阶段 短期关注环保、煤炭等板块

磨底历来都不是一天能达到的&#xff0c;比方2018年的政策底到商场底&#xff0c;半途也阅历两个多月时间。当下政策底出现之后至今也有近一个月时间&#xff0c;并且下跌量能不断缩短&#xff0c;心情面也降至冰点&#xff0c;种种迹象阐明离真正商场底的构成已经不远了。此时…

ElasticSearch常用方法

ElasticSearch:是一个储存、检索、数据分析引擎。 在互联网项目中我们经常会按一定的条件去索引我们指定的数据&#xff0c;但是在大量的数据中我们如果直接查询数据库效率是非常低的&#xff0c;ElasticSearch就可以很好的帮我们完成检索。 es封装了api提供给我我们直接操作…

测试框架pytest教程(3)夹具-@pytest.fixture

内置fixture Fixture使用pytest.fixture装饰&#xff0c;pytest有一些内置的fixture 命令可以查看内置fixture pytest --fixtures fixture范围 在pytest中&#xff0c;夹具&#xff08;fixtures&#xff09;具有不同的作用范围&#xff08;scope&#xff09;&#xff0c;用于…