rabbit MQ

 转载来自:http://baike.baidu.com/link?url=7Xj8UErDexhKYIvMsirJoLks0K_Oqx5ps_qVOtmEVUs9v-MY_2NtWQuSsUzEeJXmxABb9BkYQAR36kku9ncXU_


MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ。

MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。


Exchange:交换机,决定了消息路由规则;
Queue:消息队列;
Channel:进行消息读写的通道;
Bind:绑定了Queue和Exchange,意即为符合什么样路由规则的消息,将会放置入哪一个 消息队列

### RabbitMQ 使用指南 #### 安装与配置 为了快速部署并运行 RabbitMQ,可以利用 Docker 来简化环境搭建过程。通过以下命令可以在本地环境中启动一个带有 Web 管理界面的 RabbitMQ 实例[^2]: ```bash docker run -d --name rabbitmq \ -v /usr/local/docker/rabbitmq:/var/lib/rabbitmq \ -p 15672:15672 -p 5672:5672 \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin \ rabbitmq:management ``` 此命令会创建一个名为 `rabbitmq` 的容器,并将其持久化数据存储在主机上的 `/usr/local/docker/rabbitmq` 路径下。同时,它还设置了默认管理员账户为 `admin/admin`。 访问管理页面可以通过浏览器打开地址 `http://localhost:15672` 并登录来查看队列状态、交换器以及绑定关系等信息。 --- #### 发布/订阅模型基础 RabbitMQ 的核心功能在于支持消息的发布和消费操作。以下是实现 Exchange 和 Queue 绑定的一个简单例子[^1]: ```java // Java 示例代码 channel.exchangeDeclare(EXCHANGE_NAME, "direct"); String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, EXCHANGE_NAME, routingKey); ``` 上述代码片段展示了如何定义一个 Direct 类型的 Exchange,并将某个随机生成的名字的 Queue 与其绑定在一起。之后还可以继续调用 `basicConsume()` 方法监听该队列中的新消息到达事件[^3]。 对于更复杂的场景比如 Topic 订阅模式,则允许使用通配符匹配多个不同的 Routing Key 值[^4]。例如,“#.info” 可以表示所有包含“.info”的路由键的消息都会被发送至对应的队列中去处理。 --- #### 共享队列声明方式 当应用程序之间需要共享同一个物理队列资源时,应该注意设置合理的参数选项防止意外丢失未确认的数据项。下面给出了一种推荐做法[^4]: ```java // 创建持久化的 exchange 和 queue channel.exchangeDeclare(exchangeName, "direct", true); channel.queueDeclare(queueName, true, false, false, null); // 将两者关联起来 channel.queueBind(queueName, exchangeName, routingKey); ``` 这里特别强调的是第二个布尔值设成了 True 表明即使生产方断开连接后仍然保留这些对象直到手动删除为止;而第三个 False 参数则阻止了临时独占性质的行为发生从而允许多个客户端共同读取其中的内容。 --- #### 常见问题解答 1. **为什么我的消费者收不到任何消息?** 这可能是因为没有正确地完成 Exchange 到 Queue 的绑定或者指定错了相应的 Routing Key。请仔细核对相关部分逻辑是否一致。 2. **怎样提高系统的吞吐量性能表现呢?** - 减少不必要的 Acknowledgement 步骤频率; - 合理调整 Prefetch Count 数字大小限制每轮最多预取多少条记录等待实际处理完毕再反馈结果给服务器端知晓。 3. **遇到内存不足错误怎么办?** 如果发现由于积压过多待办事项而导致 OOM 错误的话,请考虑启用 Publisher Confirms 功能机制确保只有成功写入磁盘的日志文件才会返回成功的信号告知发件人已经安全保存下来不会遗失掉[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值