写在前面
建议使用Ubuntu的root用户进行部署,本文是傻瓜式教学,咱们直接上干货。详细的rabbitmq学习内容放在后面,有需要的可以往后翻翻~~
建立一个文件夹用于存放mq产生的数据
mkdir /data/rabbitmq -p
创建本地mq的数据存放目录
安装mq命令(直接拉取镜像加挂载配置文件目录)
直接一行搞定,–name参数是设置mq的名称的可以自行修改
docker run -d --hostname rabbit-svr --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /data/rabbitmq:/var/lib/rabbitmq rabbitmq:management
命令解释:docker 拉取mq的镜像以及对mq的端口进行映射,将需要用的端口从容器中暴露出来。如5672,一般都用这个,这是外部调用的端口。访问ui界面的端口是15672,25672用于部署集群,如果不需要进行集群部署可以暂不设置。
检查mq状态
docker ps | grep rabbit
rabbit是我的mq的名字,没有改名字的可以直接用,改了名字的自己修改
看不懂的建议直接docker ps
或者docker ps -a
ok~ 可以收工了,是不是太短了?
短吗?
管他呢收工,绝不加班,睡觉
哈哈哈,开个玩笑~
插播一条名词解释
mq的UI界面使用教程
浏览器访问:
127.0.0.1:15672
如果是使用虚拟机,在windows上访问为:
<虚拟机ip>:15672
访问结果如下(我用的是虚拟机,在windows上访问采用的是上面的第二种方式)
用户名和密码一样默认是:
guest
进入主界面
可以看到一开始只有官方给你初始化的exchange,队列什么的都是空的。好,我们来使用教学
我们进入exchange界面
点击add… 创建我们自己的exchange
这里插入一点:
这里可以看到我们新建的exchange已经存在了,可以被查看到
接下来去建立一个队列
可以看到我们刚建立的队列(我起的名字是go_oss)
然后我们去绑定exchange并设置Routing_key
可以看到绑定成功
去exchange里给我们的队列发消息
在exchange界面里点进我们建立的队列,然后publish message
记得添加我们刚才设置的R_key值,然后写消息,然后点击左下角黑色publish message
,会有个弹窗提示已经发了出去,close就行
可以看到已经有了一条消息
去查看我们刚才发的消息
点击队列里面
在get message里展开查看消息
可以看到刚才发的消息
ok 收工,下面是有关mq的一些知识
基本概念:
消息队列:保存消息的容器,用于在消息的传输过程中暂存消息。
交换机:接收生产者发送的消息,并根据一定的规则将消息路由到一个或多个队列中。
队列:存储消息的容器,等待消费者从队列中取走消息。
绑定:交换机和队列之间的关联规则。
消费者:从队列中接收并处理消息的应用程序。
特点:
可扩展性:通过添加更多的节点和队列,RabbitMQ可以实现水平扩展,满足大规模消息处理的需求。
可靠性:RabbitMQ具有持久化和通知机制,确保消息能够成功传递和处理。
灵活性:支持多种交换机类型和绑定选项,使得消息可以在多个路由路径中进行传递。
可管理性:提供可视化的管理界面,方便查看和管理队列、交换机、绑定和连接等信息。
支持多种编程语言:RabbitMQ提供了多种编程语言的客户端库,如Java、C#、Python等,使得它可以被不同的应用程序和平台所使用。
使用RabbitMQ的好处
解耦合:不同的应用程序之间可以通过消息进行通信,减少它们之间的直接联系,从而提高系统的可维护性和容错性。
提高性能:通过异步通信,RabbitMQ可以提高应用程序的性能和响应速度。
基本使用:
安装与部署:RabbitMQ可以通过多种方式安装和部署,包括使用Docker容器等。
配置与管理:通过RabbitMQ的管理界面或命令行工具,可以配置交换机、队列、绑定等,并进行监控和管理。
开发与集成:开发者可以使用RabbitMQ的客户端库,将RabbitMQ集成到应用程序中,实现消息的发送和接收。
MQ是如何保证数据一致性的
MQ(消息队列)通过一系列机制来确保数据的一致性。这些机制可以根据不同的MQ实现而有所不同,但通常包括以下几个方面:
持久化机制
:MQ支持将队列和消息进行持久化,确保消息在MQ服务器重启后不丢失。这样即使在MQ服务器发生故障时,也能保证数据的一致性。
确认机制
:在消息传递过程中,发送方会等待接收方的确认消息。例如,在RabbitMQ中,生产者发送消息到队列后,会等待队列发送确认消息,以确保消息已被成功接收和处理。这种机制可以避免消息丢失或重复发送,从而确保数据的一致性。
事务机制
:MQ支持事务机制,可以将多条消息发送到队列中作为一个原子操作。如果事务中的任何一个步骤失败,整个事务会回滚,确保数据的一致性。这种机制在需要确保一系列消息操作的完整性时非常有用。
复制和同步机制
:一些MQ实现(如Kafka)采用多副本机制,其中包含一个主副本和多个从副本。主副本负责处理读写请求,而从副本则用于备份数据。当主副本出现故障时,可以从从副本中选择一个新的主副本,以保证数据的可靠性和一致性。此外,Kafka还通过ISR(In-Sync Replicas)机制确保副本之间的数据同步,只有当副本与主副本同步时,它才被认为是有效的副本。
顺序写入
:在某些MQ实现中,数据是按照顺序写入的,这可以确保数据的顺序性和一致性。
需要注意的是,不同的MQ实现可能采用不同的机制来确保数据的一致性,因此具体的实现细节可能会有所不同。在选择和使用MQ时,需要根据具体的应用场景和需求来评估不同MQ的数据一致性保证能力。同时,还需要结合其他技术手段(如分布式事务、数据库一致性协议等)来进一步提高整个系统的数据一致性。
exchange四种工作模式
mq的几种工作模式
简单模式(Simple Mode)
P------------>QUEUE------------>C
此模式下,有一个生产者和一个消费者,不需要使用交换机,而是使用默认的交换机。消息由生产者直接发送到队列中,然后由消费者从队列中取出并处理。
工作队列模式(Work Queue Mode)
在这种模式下,有一个生产者和多个消费者。这些消费者以竞争的方式从同一个队列中获取消息,每个消息只会被一个消费者处理。这种模式可以平衡多个消费者的负载,提高消息处理的效率。
P---------->QUEUE1----------->C1------------>C2
发布订阅模式(Publish/Subscribe Mode)
此模式需要一个类型为fanout的交换机。生产者将消息发送到交换机,然后交换机将消息广播到所有与其绑定的队列中。每个队列中的消息都可以被一个或多个消费者处理。这种模式实现了消息的广播和多播。
P ----------->X(交换机)--------->QUEUE---------> C1---------> C2
DIRECT模式(Routing Mode)
在此模式下,需要设置类型为direct的交换机。生产者发送消息到交换机时,需要指定一个routing key。交换机根据这个routing key将消息发送到相应的队列。每个队列也需要指定自己的routing key,只有匹配的routing key的队列才会接收到消息。这种模式允许生产者精确控制消息的路由
P---------->X----bangdingkey1-------->QUEUE1----------->C1----bangdingkey2-------->QUEUE2----------->C2
通配符模式(Topic)
这种模式类似于路由模式,但路由键支持通配符。生产者发送消息时指定一个带有通配符的路由键,交换机根据路由键和通配符的规则将消息发送到匹配的队列中。