赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
提示:以下是本篇文章正文内容,下面案例可供参考
这篇文章里说的非常的详细了,Windows系统的直接按步骤操作,没什么难度
Exchange(交换机)
作用:Exchange是消息的路由器。生产者将消息发送给exchange,而不是直接发送给队列。exchange根据预定义的规则(称为binding)来决定哪些消息应该路由到哪个队列
类型:Exchange有多种类型,如direct(直接交换机)、fanout(广播交换机)、topic(主题交换机)和headers(基于消息头的交换机),每种类型的exchange有不同的路由策略
配置:Exchange需要预先声明,指定其类型和任何其他相关配置
Queue(队列)
作用:Queue是消息的实际存储区域,它是消息的临时容器。队列中的消息被消费者消费,或者在队列满时被丢弃(如果配置了限制)
特性:队列可以是持久的,意味着即使RabbitMQ服务器重启,队列也会保留。队列也可以是非持久的,服务器重启后队列将消失
消费:消费者从队列中获取消息,可以是同步的(一次性获取一条消息并确认)或异步的(批量获取或流式消费)
Channel(信道)
作用:Channel是客户端和服务器之间的逻辑连接,用于发送和接收消息。它允许在单个TCP连接上创建多个独立的并行通道,提高了效率
资源管理:创建和销毁TCP连接是昂贵的操作,因此通常会复用一个TCP连接并创建多个channel来处理不同的任务
并发:在一个应用程序中,通常会为每个任务或线程创建一个单独的channel,以保持操作的隔离
通常我们安装、启动RabbitMQ成功之后,系统默认用户guest/guest,该用户的权限比较大,日常使用过程中需要根据需要创建不同权限的用户
创建用户有两种方式:
这里password是你为admin用户设置的密码
rabbitmqctl add_user admin password
接下来,你需要提升用户权限,使其具有管理权限
rabbitmqctl set_user_tags admin administrator
分配vhost权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
这三个通配符参数".*"分别代表配置(conf),写(write)和读(read)权限,.*表示所有权限。
如果你想更具体地控制权限,可以将通配符替换为具体的权限字符串
在左侧菜单中,点击“Users”
点击右上角的“Add user”按钮
输入用户名(例如admin)和密码
点击“Add”按钮
在用户列表中,找到刚创建的admin用户,点击它的名称
在用户详情页面,选择“Permissions”选项卡
选择要分配权限的vhost(通常是/)
在“Configure permissions”、“Write permissions”和“Read permissions”字段中,输入通配符.*来授予所有权限,或者输入特定的权限字符串
点击“Set Permissions”按钮
返回到用户列表,再次点击admin用户
在用户详情页面,滚动到“User tags”部分
勾选“administrator”复选框
点击“Update”按钮
退出当前的guest用户,然后使用新创建的admin用户和密码登录。现在,admin用户应该有权限创建exchange和其他管理操作
注意:不要试图创建amq.test这种exchange,即使你设置了权限,也会提示没有权限
使用admin账户登入,然后切换到exchange,建议在管理台操作,简单快捷
然后再切换到queue
第三步,将exchange和queue绑定
至此,前期准备工作完成
此处我用了一个简单的python脚本,相较springboot集成rabbitmq进行验证,有快捷简单的优点
- # 导入pika库,它提供了与RabbitMQ交互的接口
- import pika
- # 创建一个到RabbitMQ服务器的阻塞式连接,'localhost'应替换为实际的服务器地址
- connections = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
- # 获取一个通道(channel),它是与RabbitMQ进行通信的实体
- channel = connections.channel()
- # 声明一个名为'my_direct_exchange'的exchange,类型为'direct'
- # direct exchange是最基础的类型,消息会根据routing key精确匹配到queue
- channel.exchange_declare(exchange='test-mq', exchange_type='direct', durable=True)
- # 定义要发送的消息,这里是一个简单的字符串'Hello, World!'
- message = 'Hello, world'
- # 发布消息到exchange,指定exchange名称、routing key和消息体
- # routing key将决定消息如何路由到queue
- channel.basic_publish(exchange='test-mq', routing_key='test-queue-1', body=message)
- # 关闭连接,释放资源
- connections.close()
- import pika
-
- def callback(ch, method, properties, body):
- # 这个回调函数会在接收到消息时被调用
- print(body)
- # 在这里处理消息,比如处理业务逻辑
- ch.basic_ack(delivery_tag=method.delivery_tag)
-
- connections = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
- channel = connections.channel()
- # 声明一个队列(如果不存在,会自动创建)
- channel.queue_declare(queue='test-queue-1', durable=True)
- # 定义消息消费行为
- channel.basic_consume(queue='test-queue-1', on_message_callback=callback, auto_ack=False)
- # 开始消费消息
- channel.start_consuming()
每隔10秒会刷新,上图列出来的是消息待消费消息总数,下图列出来的是每个时间段发送消息的数量
至此,RabbitMQ的搭建及使用就完成了。
在小小的公司里面,挖呀挖呀挖!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。