当前位置: 首页 > news >正文

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

一、微服务注册中心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配置文件中添加如下配置

springcloud:consul:host: 127.0.0.1port: 8500discovery: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.1port: 8500discovery: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 {@Autowiredprivate TaskServiceClient taskServiceClient;@Testpublic 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);}}@Testpublic void test2(){ResponseMessage message = taskServiceClient.poll(2003, 100);System.out.println(message);}@Testpublic void test3(){taskServiceClient.cancel(1175734747444367362L);// 从数据库或缓存中查找一个任务id}
}

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

feign接口注意事项:

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

http://www.mrgr.cn/news/95173.html

相关文章:

  • Linux安装Elasticsearch集群-----docker安装es集群
  • 工业相机选型
  • liunx银河麒麟v10安装MYSQL8.3.0
  • c语言基础编程入门练习题
  • Kafka 八股文
  • 使用 Spring 的 FactoryBean 创建和获取 Bean 对象
  • SpringBoot 第二课(Ⅰ) 整合springmvc(详解)
  • 备赛蓝桥杯之第十六届模拟赛3期职业院校组
  • ffmpeg库视频硬解码使用流程
  • C语言每日一练——day_8
  • 【Dive Into Stable Diffusion v3.5】1:开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练
  • Linux驱动学习笔记(四)
  • ffmpeg库视频硬编码使用流程
  • 正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-6.2uboot启动流程-lowlevel_init,s_init,_main函数执行
  • mysql-innodb存储引擎主键索引叶子结点数据结构(非单纯的双向链表)
  • atop命令介绍(全面资源监控:同时监控CPU、内存、磁盘、网络和进程活动)性能监控、资源数据
  • 前端iView面试题及参考答案
  • 分布式数据库系统(DDBS)
  • Java 大视界 -- Java 大数据在智能体育赛事直播数据分析与观众互动优化中的应用(142)
  • UE4学习笔记 FPS游戏制作7 敌人的自动寻路