SpringCloud Eureka搭建会员中心服务提供方-集群

2023-09-13 21:23:11

😀前言
本篇博文是关于SpringCloud Eureka搭建会员中心服务提供方-集群,希望你能够喜欢

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

SpringCloud Eureka 服务注册与发现

搭建会员中心服务提供方-集群

架构示意图

image-20230827094503045

创建member-service-provider-10002
  1. 参考member-service-provider-10000 来创建member-service-provider-10002 即可
  2. 创建好后, 使用member-service-provider-10000 的源码和配置替换member-service-provider-10002 生成的代码(不要到磁盘整体拷贝,会出现关联到member-service-provider-10000 的问题,很麻烦,可以创建好新项目的包,然后再拷贝对应包下的文件,就不会出问题)
  3. 提醒,拷贝时不要忘记拷贝resources/mapper/MemberMapper.xml 这些xxx.xml 文件
创建resources/application.yml
  1. 创建好application.yml
  2. 从member-service-provider-10000 拷贝application.yml 的内容
  3. 修改端口号即可
server:
	port: 10002
修改主启动类名
  1. 修改member-service-provider-10000 的主启动类为MemberProviderApplication10000
@SpringBootApplication
@EnableEurekaClient
public class MemberProviderApplication10000 {
    public static void main(String[] args) {
    	SpringApplication.run(MemberProviderApplication10000.class, args);
    }
}
  1. 修改member-service-provider-10002 的主启动类为MemberProviderApplication10002
@SpringBootApplication
@EnableEurekaClient
public class MemberProviderApplication10002 {
    public static void main(String[] args) {
    	SpringApplication.run(MemberProviderApplication10002.class, args);
    }
}
完成测试

启动eureka server 集群(目前2 台)
启动member-service-provider-10000
启动member-service-provider-10002
测试页面
浏览器输入: http://eureka9001.com:9001/

image-20230827095024136

浏览器输入: http://eureka9002.com:9002/

image-20230827095043875

注意事项和细节
  1. 因为member-service-provider-10000 和member-service-provider-10002 作为一个集群提供服务, 因此需要将spring.application.name 进行统一
  2. 这样消费方通过统一的别名进行负载均衡调用

配置服务消费端member-service-consumer-80 使用会员中心服务集群

架构图

image-20230827095148765

修改MemberConsumerController.java
   //定义member_service_provider_url 这是一个基础url地址
    //使用shift+ctrl+u 进行字母大小写的切换
    /**
     * 说明:
     * 1. MEMBER-SERVICE-PROVIDER 就是服务提供方[集群], 注册到Eureka Server 的名称
     * 2. 也就是服务提供方[集群]对外暴露的名称为 MEMBER-SERVICE-PROVIDER
     * 3. MEMBER-SERVICE-PROVIDER 目前有 两个 Availability Zones member-service-provider:10000
     *    还有一个 member-service-provider:10002
     *    需要增加一个注解@LoadBalanced 赋予 RestTemplate 负载均衡的能力,也就是会根据你的负载均衡算法
     *    来选择某个服务去访问, 默认是轮询算法, 当然我们也可以自己配置负载均衡算法
     */
    public static final String MEMBER_SERVICE_PROVIDER_URL =
            "http://MEMBER-SERVICE-PROVIDER";
修改CustomizationBean.
@Configuration
public class CustomizationBean {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
    	return new RestTemplate();
    }
}
为了看到测试效果,修改服务提供方
  1. 在两个服务提供方的查询和添加返回结果处增加自己服务名称信息, 其它位置可参考加入
@GetMapping(value = "/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id) {
    Member member = memberService.queryMemberById(id);
    log.info("查询结果= " + member);
    if (member != null) {
    	return Result.success("查询成功member-service-provider-10000", member);
    } 
    else {
    	return Result.error("402", "ID= " + id + " 不存在");
    }
}
完成测试
启动eureka server 集群(目前2 台)

​ 启动member-service-provider-10000
​ 启动member-service-provider-10002
​ 先测试: http://localhost:10000/member/get/1 和http://localhost:10002/member/get/1

http://localhost:10000/member/get/1

image-20230827103522399

http://localhost:10002/member/get/1

image-20230827103608420

启动member-service-consumer-80

​ 浏览器访问: http://localhost/member/consumer/get/1

image-20230827103650508

再次访问,会看到访问到不同的服务.

image-20230827103716243

交替访问member 服务说明:
  1. 注解@LoadBalanced 底层是Ribbon 支持算法。
  2. 2.Ribbon 和Eureka整合后consumer 直接调用服务而不用再关心地址和端口号,且该服务还有负载功能。
包依赖配置图

1.spring-cloud-starter-netflix-eureka-client 自带spring-cloud-starter-netflix-ribbon(如图)

image-20230827104018297

获取Eureka Server 服务注册信息-DiscoveryClient

需求分析/图解
  1. 先看需求分析示意图

image-20230827104057308

  1. 这里我们以服务消费方, 去获取Eureka Server 的服务注册信息为例讲解

image-20230827104125560

  1. 当然也可以在服务提供方获取Eureka Server 的服务注册信息
代码实现
  1. 所在模块member-service-consumer-80
  2. 修改com/my/springcloud/controller/MemberConsumerController.java
 @GetMapping("/member/consumer/discovery")
    public Object discovery() {

        List<String> services = discoveryClient.getServices();
        //遍历services
        for (String service : services) {
            log.info("服务名={}",service);
            List<ServiceInstance> instances = discoveryClient.getInstances(service);
            for (ServiceInstance instance : instances) {
                log.info("id={},host={},port={},uri={}",
                        instance.getServiceId(),instance.getHost(),instance.getPort(),instance.getUri());

            }
        }
        return discoveryClient;
    }
  1. 这里修改主启动类com/my/springcloud/MemberConsumerApplication.java
//排除DataSourceAutoConfiguration 自动配置
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//@EnableEurekaClient 将该程序标识为EurekaClient
@EnableEurekaClient
//@EnableDiscoveryClient 注解启用服务发现
@EnableDiscoveryClient
public class MemberConsumerApplication {
    public static void main(String[] args) {
    	SpringApplication.run(MemberConsumerApplication.class, args);
    }
}
测试
  1. 重启member-service-consumer-80
  2. 浏览器输出http://localhost/member/consumer/discovery

image-20230827104351757

后台信息:

image-20230827104419739

注意事项和细节说明
  1. 在引入DiscoveryClient 时,不要引入错误的包

    正确的包: import org.springframework.cloud.client.discovery.DiscoveryClient;
    错误的包: import com.netflix.discovery.DiscoveryClient;
    ​ 2.这里演示的是在服务消费方使用DiscoveryClient 来完成服务发现,同样,在服务提供方/模块也OK

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

更多推荐

REC 系列 Visual Grounding with Transformers 论文阅读笔记

REC系列VisualGroundingwithTransformers论文阅读笔记一、Abstract二、引言三、相关工作3.1视觉定位3.2视觉Transformer四、方法4.1基础的视觉和文本编码器4.2定位编码器自注意力的文本分支文本引导自注意力的视觉分支4.3定位解码器定位query自注意力编码器-解码器自

告别加班烦恼:前端表格构建公式树的绝妙应用!

还在为满屏的公式而“内牛满面”吗?还在为长串的公式解析而发愁吗?还在定位错误的公式而苦恼吗?上班要写代码,加班还要分析这又长又臭的公式。你的发际线还好吗?本葡萄来拯救你的发际线啦!带来的不是洗发水,而是公式追踪!这一章,让本葡萄带你用前端电子表格的公式追踪构建公式树,快(解)速(救)分(你)析(的)公(脱)式(发)问题

【物联网】ROM、RAM和FLASH的区别

引言在计算机领域,我们经常听到ROM、FLASH和RAM这些术语,它们是计算机中不同类型的存储器。虽然它们都用于存储数据,但它们之间有着明显的区别。本文将详细介绍ROM、FLASH和RAM的区别,并给出具体的例子和解释。文章目录引言ROM(只读存储器)RAM(随机存储器)FLASH(闪存)总结ROM(只读存储器)ROM

【web开发】12、Django知识点回顾

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录总结、Django知识点回顾提示:以下是本篇文章正文内容,下面案例可供参考总结、Django知识点回顾安装Djangopipinstalldjango创建Django项目django-adminstartprojectmysite注意:Pychar

stm32---定时器输入捕获

一、输入捕获介绍在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种。STM32F1除了基本定时器TIM6和TIM7,其他定时器都具有输入捕获功能。输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量PWM输入信号的频率及占空比。输入捕获的工作原理比较简单

新概念英语(第二册)复习——Lesson 6 - Lesson10

前言在学习6-10之前,确保1-5已经可以脱口而出,否则不需要学习6-10文章目录前言Lesson6-PercyButtons原文译文单词Lesson7-Toolate原文译文单词Lesson8-Thebestandtheworst原文译文单词Lesson9-Acoldwelcome译文单词Lesson10-NotFo

数组初学者向导:使用Python从零开始制作经典战舰游戏

引言战舰游戏,一个广受欢迎的经典游戏,为玩家提供了策略与猜测的完美结合。这个游戏的核心思想是通过猜测敌方船只的位置并尝试击沉它们来赢得比赛。在这篇文章中,我们将使用Python语言和数组来构建这款游戏,让你更加了解数组的操作和实用性。1.游戏概述在战舰游戏中,每位玩家都有一个10x10的网格,可以放置5艘船只。这些船只

C语言实现三子棋游戏(详解)

目录引言:1.游戏规则:2.实现步骤:2.1实现菜单:2.2创建棋盘并初始化:2.3绘制棋盘:2.4玩家落子:2.5电脑落子:2.6判断胜负:3.源码:结语:引言:《三子棋》是一款古老的民间传统游戏,又被称为OOXX棋、黑白棋,井字棋,九宫棋等。游戏分为双方对战,双方依次在九宫格棋盘上摆放棋子,率先将自己的三个棋子连成

Linux 下的 10 个 PDF 软件

本文[1]是我们正在进行的有关Linux顶级工具系列的延续,在本系列中,我们将向您介绍最著名的Linux系统开源工具。随着互联网上越来越多地使用可移植文档格式(PDF)文件来获取在线书籍和其他相关文档,拥有PDF查看器/阅读器对于桌面Linux发行版非常重要。有几种可以在Linux上使用的PDF查看器/阅读器,它们都提

Excel VBA 变量,数据类型&常量

几乎所有计算机程序中都使用变量,VBA也不例外。在过程开始时声明变量是一个好习惯。这不是必需的,但有助于识别内容的性质(文本,​​数据,数字等)在本教程中,您将学习-一、VBA变量变量是存储在计算机内存或存储系统中的特定值。以后,您可以在代码中使用该值并执行。计算机将从系统中获取该值并显示在输出中。必须为每个变量指定一

Java内存模型

一、运行时数据区域的分区JVM虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。1.1运行时数据区域的划分JVM虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK1.8之前分为:线程共享(Heap堆区、MethodArea方法区)、线程私有(虚拟机栈、本地方法栈

热文推荐