虚拟电商-延迟任务系统的微服务改造(二)注册中心和Feign调用

news2025/4/22 8:54:11

一、微服务注册中心Consul

编写完延迟任务系统的web层接口,也就是说可以基于http协议来访问延迟系统,接下来要将延迟任务改造成一个服务。首要考虑的问题就是服务的注册与发现,服务的注册与发现都离不开服务的注册中心,本项目选取Consul作为注册中心。

注册中心为什么选择Consul

SpringCloud支持很多的服务发现软件,Eureka只是其中之一,常见的服务发现软件有:
Eureka
Consul
Zookeeper
Feature
etcd

Consul的特性

1.Consul是一个分布式高可用系统,他包含多个组件,但是作为一个整体,在微服务架构中为我们的基础设施提供服务发现和服务配置功能。
2.是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。
3.内置了服务注册与发现框架,分布式一致性协议实现,健康检查,key/value存储,多数据中心方案。
4.分布式实现不需要依赖其他工具,比如Zookeeper。
5.使用Go语言编写,具备天然可移植性,支持Linux、windows和Mac OS X,安装包仅一个可执行文件。

1.1.Consul安装

启动成功后打开浏览器访问网址: http://localhost:8500/
在这里插入图片描述

1.2.Consul的特性

服务发现、健康检查、Key/Value存储、多数据中心

1.3.Consul的优势

1.使用Raft算法保证一致性,比复杂的Paxos算法更直接。
2.支持多数据中心,内外网的服务采用不同端口进行监听。多数据中心集群可以避免但数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况。
3.支持健康检查
4.支持HTTP和DNS协议接口
5.官方提供web管理界面

1.4.Consul的角色

Client客户端
特点:
1.无状态
2.将HTTP和DNS接口请求转发给局域网的服务端集群

server服务端
特点:
1.保存配置信息
2.高可用集群
3.在局域网内与本地客户端通信
4.通过广域网与其他数据中心通信
5.每个数据中心的server数量推荐3个或5个

Consul的服务端和客户端支持跨中心使用,更加提升了高可用性。

二、SpringCloud集成Consul

现在需要使用SpringCloud集成Consol,将延迟任务注册到注册中心,变成一个服务。目前项目都是基于SpringBoot去构建的,需要将两者版本进行对应避免在开发过程中出现一些不必要的麻烦,需要注意SpringBoot和SpringCloud的版本对应关系。

步骤一:在chongba_parent父工程的pom文件中添加SpringCloud的依赖管理

先添加properties版本号参数

<spring-cloud.version>Greenwich.SR1</spring-cloud.version>

然后添加SpringCloud依赖坐标

<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>
    </dependencies>
</dependencyManagement>

步骤二:延迟任务系统需要在注册中心去注册,在chongba_schedule_service的pom文件中添加依赖

<!--健康检查依赖包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--SpringCloudConsul支持包-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

步骤三:在chongba_schedule_service的application.yml配置文件中添加如下配置

spring
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        serviceName: ${spring.application.name}

步骤四:启动ScheduleApplication,查看Consul的UI控制台界面

在这里插入图片描述

三、延迟任务Feign集成

项目目前已经使用springcloud和consol进行了集成。并且将延迟任务系统在注册中心进行了注册,已经注册成为了一个微服务。并且我们已经启动了两个节点,成功改造成了分布式。
那么我们如何去调用服务?我们不可能使用向之前那样使用PostMan 去发送http请求调用。我们需要集成Feign组件。Feign组件集成之后,我们对服务的调用就会转换为对Feign接口方法的调用,使得调用http服务更加的简单。

Feign是一个声明式的HTTP客户端,spring-cloud-openfeign将feign集成到spring boot中,在接口上通过注解声明Rest协议,就能将http调用转换为接口方法的调用,这样达到客户端调用http服务更加简单。

此外:Spring Cloud Feign还整合了Spring Cloud Ribbon (负载均衡)和Spring Cloud Hystrix(熔断器)

步骤:

步骤1:在父工程chongba_parent下创建子模块chongba_schedule_feign,单独创建一个feign模块的作用是为了让其他模块使用起来更加的方便,直接引入feign模块即可。

步骤2:在chongba_schedule_feign模块的pom文件中添加如下依赖

<dependencies>
    <dependency>
        <groupId>com.chongba</groupId>
        <artifactId>chongba_common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency><!--健康检查依赖包-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--SpringCloudConsul支持包-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency><!--feign 支持 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

步骤3:在src/main/java下创建包com.chongba.feign,并在该包下创建TaskServiceClient接口,用于调用延迟任务服务schedule-service

@FeignClient("schedule-service") //指定调用的服务名称
public interface TaskServiceClient {
    
    @PostMapping("/task/push")
    public ResponseMessage push(@RequestBody Task task);
    
    @GetMapping("/task/poll/{type}/{priority}")
    public ResponseMessage poll(@PathVariable("type") Integer type, @PathVariable("priority") Integer priority);
    
    @PostMapping("/task/cancel")
    public ResponseMessage cancel(@RequestParam("taskId") Long taskId);
}

下面如果想在chongba_schedule_feign工程中直接能对TaskServiceClient接口中的方法进行测试,则需要进行如下步骤的配置操作:

步骤1:在src/main/resources下创建配置文件 application.yml,并添加如下配置

spring:   
  application:  
    name: fegin #指定服务名
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
       register: false #不需要注册到consul

注意:feign无需在consul中注册,因为feign只需要去发现服务然后进行调用即可,自己本身并不需要称为一个服务

步骤2:在chongba_schedule_feign下创建启动类FeignAppliction

@SpringBootApplication
@EnableFeignClients
public class FeignAppliction {
    public static void main(String[] args) {
        SpringApplication.run(FeignAppliction.class,args);
    }
}

步骤3:在chongba_schedule_feign工程下创建测试包:com.chongba.feign,并创建测试类TaskClientTest,添加测试方法测试添加任务

@RunWith(SpringRunner.class)
@SpringBootTest(classes = FeignAppliction.class)
public class TaskClientTest {
    
    @Autowired
    private TaskServiceClient taskServiceClient;
    
    @Test
    public void test1(){
        for (int i = 0; i < 4; i++) {
            Task task  = new Task();
            task.setTaskType(2003);
            task.setParameters("testFeignClient".getBytes());
            task.setPriority(100);
            task.setExecuteTime(new Date().getTime());
            ResponseMessage reponse = taskServiceClient.push(task);
            System.out.println(reponse);
        }
    }
    @Test
    public void test2(){
        ResponseMessage message = taskServiceClient.poll(2003, 100);
        System.out.println(message);
    }
    
    @Test
    public void test3(){
        taskServiceClient.cancel(1175734747444367362L);// 从数据库或缓存中查找一个任务id
    }
}

步骤4:测试,先清空数据库和缓存,必须保证延迟任务服务是启动状态,启动两个节点:81,82,以便测试出feign对负载均衡的集成。

feign接口注意事项:

  1. 当参数比较复杂时,feign即使声明为get请求也会强行使用post请求
    HTTP 405 错误 – 方法不被允许 (Method not allowed)
  2. 有参数时候必须使用 @RequestParam注解 必须要在后面加上参数名

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

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

相关文章

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…

第十六届蓝桥杯康复训练--6

题目链接&#xff1a;790. 数的三次方根 - AcWing题库 思路&#xff1a;二分&#xff0c;注意正负号和小数判断退出的方法&#xff08;虽然正负无所谓&#xff09; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…

logisim安装以及可能出现的问题

阅读提示&#xff1a;我这篇文章更偏向于安装出现问题的解决方案 目录 一、安装步骤 二、安装问题 1、出错的问题 2、出错的原因与解决方法 一、安装步骤 1、下载logisim 官方网站&#xff1a;https://sourceforge.net/projects/circuit/ 下载适用于你操作系统的版本&…

Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发

DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序&#xff0c;必须通过Servlet来处理 没有Servlet&#xff0c;java是无法处理web请求的 Web交互&#xff1a; 接收请求HttpServletRequest&#xff1a;可以获取到请求的信息&#xff0c;比如uri&#…

hackmyvm-Icecream

arp-scan -l nmap -sS -v 192.168.222.106 enum4linux 192.168.222.106 445端口 smbmap -H 192.168.222.106 icecream为只读模式 smbclient \\192.168.222.106\icecream 反弹shell(上传put php-reverse-shell.php) 开启监听 nc -lnvp 1234 拿到webshell cat /etc/passwd 9000端…

告别低效人工统计!自动计算计划进度

实时监控任务进度一直是项目管理中的一项巨大挑战。 人工统计方式不仅耗时耗力&#xff0c;而且往往由于信息传递的延迟和人为误差&#xff0c;导致无法实时获得准确的项目进展信息。 这种不准确性可能掩盖潜在的风险点&#xff0c;从而影响项目的整体进度和成果。 Ganttable …

AI比人脑更强,因为被植入思维模型【16】反脆弱

毛选中就有言&#xff0c;不经历困难&#xff0c;我们就不会掌握战胜困难的方法。 这个世界纷繁复杂&#xff0c;不是强者总是运气好&#xff0c;而是他们能够失败后快速复原&#xff0c;不断找到战胜困难的方法。 定义 马斯洛需求层次模型是一种将人类需求从低到高按层次进…

L2TP实验

放开安全策略机制&#xff0c;FW1不配IP [FW1]firewall zone trust [FW1-zone-trust]add interface GigabitEthernet 1/0/0 [FW1]security-policy [FW1-policy-security]default action permit FW2 和FW3 [FW2]interface g1/0/1 [FW2-GigabitEthernet1/0/1]ip address 2…

【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 遗传算法GA2. 长短期记忆网络LSTM3. 基于GA-LSTM的光伏功率预测4. 部分代码展示5. 运行结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 …

【记录一下】LMDeploy学习笔记及遇到的问题

LMDeploy 是一个用于大型语言模型&#xff08;LLMs&#xff09;和视觉-语言模型&#xff08;VLMs&#xff09;压缩、部署和服务的 Python 库。 其核心推理引擎包括 TurboMind 引擎和 PyTorch 引擎。前者由 C 和 CUDA 开发&#xff0c;致力于推理性能的优化&#xff0c;而后者纯…

HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述

这个是上一年的项目&#xff0c;之前弄得不怎么完整&#xff0c;只有一个openmv的&#xff0c;所以openmv自己去我主页找&#xff0c;这篇主要讲蓝牙 这个是我在使用openmv连接单片机1然后单片机1与单片机2通过蓝牙进行通信 最终实现的效果是&#xff1a;openmv识别到图形和数…

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…

OpenLayers集成天地图服务开发指南

以下是一份面向GIS初学者的OpenLayers开发详细教程&#xff0c;深度解析代码&#xff1a; 一、开发环境搭建 1.1 OpenLayers库引入 <!-- 使用CDN引入最新版OpenLayers --> <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/ollatest/ol.c…

VBA-Excel

VBA 一、数据类型与变量 常用数据类型&#xff1a; Byte&#xff1a;字节型&#xff0c;0~255。Integer&#xff1a;整数型&#xff0c;用于存储整数值&#xff0c;范围 -32768 到 32767。Long&#xff1a;长整型&#xff0c;可存储更大范围的整数&#xff0c;范围 -214748364…

OpenHarmony 开源鸿蒙北向开发——linux使用make交叉编译第三方库

这几天搞鸿蒙&#xff0c;需要编译一些第三方库到鸿蒙系统使用。 头疼死了&#xff0c;搞了一个多星期总算搞定了。 开贴记坑。 一、SDK下载 1.下载 在linux下使用命令 wget https://cidownload.openharmony.cn/version/Master_Version/OpenHarmony_5.1.0.54/20250313_02…

【第14届蓝桥杯C/C++B组省赛】01串的熵

问题描述 算法思想 首先分析题目中给出的公式 S 100时&#xff0c;其信息熵为 H(S)−p(0)log2​(p(0)) − p(0)log2​(p(0)) − p(1)log2​(p(1)) 继续化简公式得 设0出现的次数为x&#xff0c;1出现的次数为3-x H(S)−x * p(0) * log2​(p(0)) − (3-x) * p(1) * log2​(p(1)…

鸿蒙harmonyOS笔记:练习CheckBoxGroup获取选中的值

除了视觉效果实现全选和反选以外&#xff0c;咱们经常需要获取选中的值&#xff0c;接下来看看如何实现。 核心步骤&#xff1a; 1. 给 CheckBoxGroup 注册 onChange。 2. CheckBox 添加 name 属性。 3. 在 onChange 的回调函数中获取 选中的 name 属性。 事件&#xff1a…

收数据花式画图plt实战

目录 Python plt想把纵坐标化成对数形式代码 子图ax. 我又有ax scatter&#xff0c;又有ax plot&#xff0c;都要去对数 数字接近0&#xff0c;取对数没有定义&#xff0c;怎么办 创建数据 添加一个小的常数以避免对数未定义的问题 创建一个figure和一个子图ax 在子图a…

系统架构书单推荐(一)领域驱动设计与面向对象

本文主要是个人在学习过程中所涉猎的一些经典书籍&#xff0c;有些已经阅读完&#xff0c;有些还在阅读中。于我而言&#xff0c;希望追求软件系统设计相关的原则、方法、思想、本质的东西&#xff0c;并希望通过不断的学习、实践和积累&#xff0c;提升自身的知识和认知。希望…

Centos6配置yum源

Centos6配置yum源 为Centos6配置CentOS Vault源—防止yum源过期为Centos6配置epel源为Centos6配置ELRepo源---已ELRepo被官方清空Centos6安装dockerdocker配置国内镜像加速 为Centos6配置CentOS Vault源—防止yum源过期 参考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…