RabbitMQ实战:构建高效可靠的分布式系统

摘要

以前看过的关于RabbitMQ核心消息模式的文章都是基于JavaAPI的,最近看了下官方文档,发现这些核心消息模式都可以通过Spring AMQP来实现。于是总结了下RabbitMQ的实用技巧,包括RabbitMQ在Windows和Linux下的安装、5种核心消息模式的Spring AMQP实现,相信对于想要学习和回顾RabbitMQ的朋友都会有所帮助。

简介

RabbitMQ是最受欢迎的开源消息中间件之一,在全球范围内被广泛应用。RabbitMQ是轻量级且易于部署的,能支持多种消息协议。RabbitMQ可以部署在分布式系统中,以满足大规模、高可用的要求。

相关概念

我们先来了解下RabbitMQ中的相关概念,这里以5种消息模式中的路由模式为例。

948e540302ee5b62ff9e29cd40bb474f.jpeg


79b654ec0b98275f130724fc1b4c6656.jpeg

安装及配置

接下来我们介绍下RabbitMQ的安装和配置,提供Windows和Linux两种安装方式。

Windows下的安装

  • 安装Erlang,下载地址:http://erlang.org/download/ot...
67b87b847031d7e84f163717835a9e19.jpeg
  • 安装RabbitMQ,下载地址:https://dl.bintray.com/rabbit...
4e3fb0bef323a2da0dd80edcddbb9bc3.jpeg
  • 安装完成后,进入RabbitMQ安装目录下的sbin目录;
990fb37475d8aea4f3a87ba20862abc4.jpeg
  • 在地址栏输入cmd并回车启动命令行,然后输入以下命令启动管理功能。
rabbitmq-plugins enable rabbitmq_management 6b5450226a87eeac9a9a1dcfbd2d2931.jpeg

Linux下的安装

  • 下载rabbitmq 3.7.15的Docker镜像;
docker pull rabbitmq:3.7.15
  • 使用Docker命令启动服务;
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \-d rabbitmq:3.7.15
  • 进入容器并开启管理功能;
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management b4e400b74c7242c86c52a864eee963a9.jpeg
  • 开启防火墙便于外网访问。
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload

访问及配置

  • 访问RabbitMQ管理页面地址,查看是否安装成功(Linux下使用服务器IP访问即可):http://localhost:15672/
d81cf8968f1a3c9ee1ea683dd31a8e27.jpeg
  • 输入账号密码并登录,这里使用默认账号密码登录:guest guest
  • 创建帐号并设置其角色为管理员:mall mall
98a0a1c3393703646916624fdb00aa47.jpeg
  • 创建一个新的虚拟host为:/mall
d1ffab15d8e3759fa0f931cf69dd339b.jpeg
  • 点击mall用户进入用户配置页面;
34785b4a0b1b5396cdf7a4a6bb8a39fc.jpeg
  • 给mall用户配置该虚拟host的权限;
4f85745b2102575f73a710b33bdfa5ac.jpeg
  • 至此,RabbitMQ的配置完成。

5种消息模式

这5种消息模式是构建基于RabbitMQ的消息应用的基础,一定要牢牢掌握它们。学过RabbitMQ的朋友应该了解过这些消息模式的Java实现,这里我们使用Spring AMQP的形式来实现它们。

简单模式

简单模式是最简单的消息模式,它包含一个生产者、一个消费者和一个队列。生产者向队列里发送消息,消费者从队列中获取消息并消费。

模式示意图

d5da031c23c37829d749e32879f5e85f.jpeg

Spring AMQP实现

  • 首先需要在pom.xml中添加Spring AMQP的相关依赖;

7df7cdbbeb5fc522c692e97a5947aedc.jpeg

  • 然后修改application.yml,添加RabbitMQ的相关配置;

fb7ee86060d480ecc8f1c15435d97885.jpeg

  • 添加简单模式相关Java配置,创建一个名为simple.hello的队列、一个生产者和一个消费者;

9b15b56ea15a24dc83843d9af8d6cb32.jpeg

  • 生产者通过send方法向队列simple.hello中发送消息;

4c1b6ea8d159d4e7a4a36e5955ccf97e.jpeg消费者从队列simple.hello中获取消息;

4d3c727d4630d1496ddb079002cf879b.jpeg

  • 在controller中添加测试接口,调用该接口开始发送消息;

fc5ceb6d13297bc97c2acf5506565c77.jpeg运行后结果如下,可以发现生产者往队列中发送消息,消费者从队列中获取消息并消费。

57cc9d0c57169e0db96f098010dafeec.jpeg f7d32b4fd21073c592568a61290ae042.jpeg

工作模式

工作模式是指向多个互相竞争的消费者发送消息的模式,它包含一个生产者、两个消费者和一个队列。两个消费者同时绑定到一个队列上去,当消费者获取消息处理耗时任务时,空闲的消费者从队列中获取并消费消息。

模式示意图

4d7747f715a91d8da2d20ab955707df0.jpeg

Spring AMQP实现

  • 添加工作模式相关Java配置,创建一个名为work.hello的队列、一个生产者和两个消费者;
  • a9ed305df8d3417a2babcb8009cae999.jpeg生产者通过send方法向队列work.hello中发送消息,消息中包含一定数量的.号;
  • ab17193ef227a932f45fe0bdc4d51ffb.jpeg两个消费者从队列work.hello中获取消息,名称分别为instance 1和instance 2,消息中包含.号越多,耗时越长;
  • 74f88f8c1a778fdd144ec43235ddf161.jpeg在controller中添加测试接口,调用该接口开始发送消息;
  • eb7a2145f7642e96c53f4face4cb95f2.jpeg运行后结果如下,可以发现生产者往队列中发送包含不同数量.号的消息,instance 1和instance 2消费者互相竞争,分别消费了一部分消息。
49f8a9be2de9e4dd2e0ced7da637fde3.jpeg 4fc2b187aca0f3665c6ca36ff3dc50d3.jpeg 767319ff4ded9fdc1d4cb2a2c474b852.jpeg

发布/订阅模式

发布/订阅模式是指同时向多个消费者发送消息的模式(类似广播的形式),它包含一个生产者、两个消费者、两个队列和一个交换机。两个消费者同时绑定到不同的队列上去,两个队列绑定到交换机上去,生产者通过发送消息到交换机,所有消费者接收并消费消息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值