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

这篇具有很好参考价值的文章主要介绍了SpringCloud学习笔记(三)_服务提供者集群与服务发现Discovery。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务提供者集群

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

架构图如下:

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

由上可以看出存在多个同一种服务提供者(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配置文件如下:

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

 1 # 端口
 2 server:
 3   port: 8002
 4 
 5 spring:
 6   application:
 7     name: cloud-payment-service
 8   #   数据源基本配置
 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个支付服务

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

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

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

 1 @Configuration
 2 public class AppConfig {
 3 
 4     /**
 5      * 注入restTemplate,请用请求rest接口
 6      * @return
 7      */
 8     @Bean
 9     // 标注此注解后,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,进行访问,可以看到已到达负载均衡的目的

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

服务发现Discovery

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

案例如下:

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

 1 // Eureka客户端
 2 @EnableEurekaClient
 3 // 启用服务发现
 4 @EnableDiscoveryClient
 5 @SpringBootApplication
 6 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     @Autowired
 4     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,进行访问

页面结果:

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

后台日志:

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

由上可知,通过DiscoveryClient能获取到注册进eureka里面的微服务信息。文章来源地址https://www.toymoban.com/news/detail-673147.html

到了这里,关于SpringCloud学习笔记(三)_服务提供者集群与服务发现Discovery的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 服务提供者 Eureka + 服务消费者(Rest + Ribbon)实战

    Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单来说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某

    2024年02月04日
    浏览(29)
  • 记一次dubbo消费者注册失败找不到服务提供者问题

    项目分多套环境,其中一套环境重新部署时,频繁出现消费者找不到服务提供者的错误 经过多次重启后才有可能恢复正常,而其他环境并没有发现此问题 怀疑点: 1.消费者和服务提供者dubbo版本对不上 2.服务提供者没有注册上服务 3.注册中心有问题 逐一排查: 1.消费者和服

    2023年04月18日
    浏览(29)
  • Java安全——安全提供者

    安全提供者 在Java中,安全提供者(Security Provider)是一种实现了特定安全服务的软件模块。它提供了一系列的加密、解密、签名、验证和随机数生成等安全功能。安全提供者基础设施在Java中的作用是为开发人员提供一种扩展和替换标准安全功能的方式,以满足特定的安全需

    2024年02月12日
    浏览(29)
  • 探索安卓内容提供者:构建、访问和管理数据【复习】

    内容提供者(ContentProvider)是Android系统四大组件之一,它是不同应用程序之间进行数据共享的标准API ,通过ContentResolver类可以访问ContentProvider中共享的数据。 ContentProvider的工作原理如下: A程序使用ContetntProvider暴露数据,才能被其他程序操作。B程序通过ContetnResolver操作A程序

    2024年02月10日
    浏览(27)
  • 移动应用开发实验-内容提供者-ContentResolver的使用

    本人将所学和前人的成果和经验结合,仅供学习和参考!!! 本文大部分源码内容有清晰的注释,请认真阅读! 通过线性布局和相对布局来搭建通讯录界面,界面效果如下图所示。创建布局文件contact_item.xml、导入界面图片、放置界面控件、创建条目界面的背景文件。创建

    2024年02月08日
    浏览(38)
  • 简单步骤:Android studio 内容提供者 - 实现建立手机通讯录界面,读取系统联系人

    提示:本篇文章将会尽量保持精简,同时请诸位敲写代码时保持耐心,三连是最大的支持! 文章目录 前言 一、项目介绍 二、使用步骤 1.创建程序 2.添加 recyclerview-v7 库 3.放置界面控件 4.搭建界面布局 5.封装实体类 6.编写数据适配器 7.实现显示界面数据功能 8.去掉默认标题栏

    2024年02月08日
    浏览(37)
  • dubbo启动报错 java.lang.reflect.InvocationTargetException null 没有提供者没有消费者

    启动dubbo时,控制台报错信息如下。 打开dubbo的服务注册中心发现 在网上查找了一番,网上的说发众说飞云,有人说要保证提供者和消费者的包名一致,也有人说是ip的问题要在host里面配置, 后来经过一番仔细查找发现不对的地方了 服务提供者的主类上没有配置注解,这个

    2024年02月13日
    浏览(34)
  • CSDN博客批量查询质量分https://yma16.inscode.cc/请求超时问题(设置postman超时时间)(接口提供者设置了nginx超时时间)

    https://yma16.inscode.cc/ 查询别人的一下子就返回了,查询我自己的,1分钟还不返回,然后就显示超时了。。 一开始我还以为是这个开源项目本身的问题,设置了请求超时时间,我还给它改了超时时间,后来发现不是的。。。 本来是100000的,我给改成1000000了,我对js代码不熟,

    2024年02月12日
    浏览(34)
  • SpringCloud学习笔记(六)_Ribbon服务调用

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时、重试等。简单的说,就是在配置文件中列出Load Balance(简称LB)后面

    2024年02月11日
    浏览(31)
  • SpringCloud学习笔记-Eureka的服务拉取

    假设是OrderService里面拉取Eureka的服务之一User Service 通过服务名称获取IP地址的原理如下图所示,其中由于WIndows电脑的设置,原来的IP地址被替换成为了电脑名称LAPTOPXXX,其实还是可以获取到具体的IP

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包