标签: amqp

RabbitMQ和通道与连接之间的关系

RabbitMQ的Java客户端具有以下概念:

  • Connection - 与RabbitMQ服务器实例的连接
  • Channel - ???
  • 使用者线程池 - 使用RabbitMQ服务器队列消息的线程池
  • 队列 - 以FIFO顺序保存消息的结构

我想了解的关系,更重要的是,该协会之间.

  1. 我还不太确定它Channel是什么,除了这是你发布和使用的结构,以及它是从一个开放的连接创建的.如果有人可以向我解释"频道"代表什么,那么可能有助于澄清一些事情.
  2. 频道和队列之间有什么关系?可以使用相同的通道与多个队列进行通信,还是必须为1:1?
  3. Queue和Consumer Pool之间有什么关系?多个消费者可以订阅同一个队列吗?同一个消费者可以使用多个队列吗?或者是1:1的关系?

在此先感谢您的帮助!

java messaging channel amqp rabbitmq

158
推荐指数
4
解决办法
6万
查看次数

RabbitMQ/AMQP:单个队列,同一个消息的多个消费者?

我一般只是开始使用RabbitMQ和AMQP.

  • 我有一个消息队列
  • 我有多个消费者,我想用同样的消息做不同的事情.

大多数RabbitMQ文档似乎都专注于循环,即单个消费者使用单个消息,负载在每个消费者之间传播.这确实是我见证的行为.

例如:生产者有一个队列,每2秒发送一次消息:

var amqp = require('amqp');
var connection = amqp.createConnection({ host: "localhost", port: 5672 });
var count = 1;

connection.on('ready', function () {
  var sendMessage = function(connection, queue_name, payload) {
    var encoded_payload = JSON.stringify(payload);  
    connection.publish(queue_name, encoded_payload);
  }

  setInterval( function() {    
    var test_message = 'TEST '+count
    sendMessage(connection, "my_queue_name", test_message)  
    count += 1;
  }, 2000) 


})
Run Code Online (Sandbox Code Playgroud)

这是一个消费者:

var amqp = require('amqp');
var connection = amqp.createConnection({ host: "localhost", port: 5672 });
connection.on('ready', function () {
  connection.queue("my_queue_name", function(queue){
    queue.bind('#'); …
Run Code Online (Sandbox Code Playgroud)

messaging amqp rabbitmq node.js node-amqp

126
推荐指数
5
解决办法
11万
查看次数

JMS和AMQP - RabbitMQ

我试图了解JMS以及它与AMQP术语的关联方式.我知道JMS是一个API,而AMQP是一个协议.

这是我的假设(以及问题)

  • RabbitMQ使用AMQP协议(而不是实现AMQP协议)
  • Java客户端需要使用AMQP协议客户端库来连接/使用RabbitMQ
  • JMS API在哪里发挥作用?JMS API应该使用AMQP客户端库连接到RabbitMQ吗?
  • 通常我们使用JMS来连接像RabbitMQ,ActiveMQ等消息代理.那么这里使用的默认协议是什么而不是AMQP?

上面的一些可能是愚蠢的.:-)但是试图绕过它.

java jms message-queue amqp rabbitmq

118
推荐指数
3
解决办法
5万
查看次数

RabbitMQ消息的大小和类型

  1. RabbitMQ队列中可以存储哪些消息?只有字符串?或者我可以选择我想要存储的类型:int,binary,string等?
  2. 一条消息的最大大小是多少?
  3. 可以创建多少个队列或交换?或者它取决于服务器的功率?

queue message-queue amqp rabbitmq

92
推荐指数
3
解决办法
6万
查看次数

为什么要使用AMQP/ZeroMQ/RabbitMQ

而不是写自己的图书馆.

我们正在开发一个项目,这个项目将是一个自我划分的服务器池,如果一个部分变得太重,管理员会将其划分并将其作为一个单独的进程放在另一台机器上.它还会警告所有连接的客户端,这会影响连接到新服务器.

我很好奇使用ZeroMQ进行服务器间和进程间通信.我的伴侣宁愿自己动手.我期待社区回答这个问题.

我自己是一个相当新手的程序员,只是学习了消息队列.正如我用Google搜索和阅读,似乎每个人都在使用消息队列来处理各种各样的事情,但为什么呢?是什么让他们比编写自己的图书馆更好?为什么它们如此常见,为什么会有这么多?

messaging amqp rabbitmq zeromq

73
推荐指数
4
解决办法
2万
查看次数

RabbitMQ:主题交换的持久消息

我是RabbitMQ的新手.

我已经建立了一个'主题'交换.消费者可以在发布者之后开始.我希望消费者能够接收在他们启动之前已经发送的消息,而这些消息还没有被消费.

交换使用以下参数设置:

exchange_type => 'topic'
durable => 1
auto_delete => 0
passive => 0
Run Code Online (Sandbox Code Playgroud)

使用此参数发布消息:

delivery_mode => 2
Run Code Online (Sandbox Code Playgroud)

消费者使用get()从交换中检索消息.

不幸的是,任何客户端启动之前发布的任何消息都将丢失.我使用了不同的组合.

我想我的问题是交换机没有保留消息.也许我需要在发布者和队列之间有一个队列.但这似乎不适用于通过密钥路由消息的"主题"交换.

知道我该怎么做.我使用Perl绑定Net :: RabbitMQ(应该无关紧要)和RabbitMQ 2.2.0.

amqp rabbitmq

64
推荐指数
2
解决办法
2万
查看次数

哪些域是面向消息的中间件,如AMQP有用吗?

MOM(面向消息的中间件)解决了什么问题?可扩展性?积分?

他们通常使用哪个域,哪些域通常使用?

例如,谷歌是否使用此类解决方案作为其主要搜索引擎或为GMail提供支持?

那么大型网站如沃尔玛,eBay,FedEx(几乎是一家Java商店)和buy.com(几乎是MS商店)呢?妈妈是否解决了那里的需求?

当你编写一个控制服务器端的Web应用程序并且拥有一个同质环境(比如数十个所有运行Linux + Java JVM的Amazon EC2实例)以及客户端(Web浏览器)时,它是否有意义?

对于需要与服务器通信的桌面应用程序是否有意义?

或者,对于大型企业而言,它通常是由无数不同系统组成的快乐组合,需要以某种方式进行通信?

我对它们有用的东西感到有点困惑,我认为通过它们适合的地方以及它们不合适的地方,我可以更好地理解它们的用途.

message-queue mom amqp

57
推荐指数
4
解决办法
1万
查看次数

RabbitMQ vs Socket.io?

我正在进行实时的实时Web应用程序开发.

浏览器用户应该能够通过node.js服务器相互通信.其中一个用户写入消息,所有其他用户将获得它.

我不太了解RabbitMQ的工作原理.但是从快速阅读来看,它似乎处理消息的发布/订阅.

用户(在浏览器中)发布内容,订阅者(在其他浏览器中)获取该消息.这不是Socket.io用websockets做的吗?

这是我的问题:

  1. 每个人的优点/缺点是什么?
  2. Socket.io可以取代RabbitMQ吗?
  3. 是否存在我需要RabbitMQ用于Socket.io不足的Web应用程序的场景?

amqp rabbitmq websocket node.js socket.io

53
推荐指数
2
解决办法
2万
查看次数

AMQP中的"交付模式"是什么?

我知道有两种选择:

  • "非持久"
  • "老大难"

但这究竟意味着什么呢?

"非持久性"如下:如果没有消费者,AMQP结构将尝试传递消息,消息将被删除?

"持久"如下:AMQP将重试消息,直到消费者接受它?

amqp

52
推荐指数
2
解决办法
4万
查看次数

RabbitMQ/AMQP - MicroService架构中的最佳实践队列/主题设计

我们正在考虑为我们的微服务基础设施(编排)引入基于AMQP的方法.我们提供多种服务,比如客户服务,用户服务,文章服务等.我们计划将RabbitMQ作为我们的中央消息系统.

我正在寻找有关主题/队列等系统设计的最佳实践.一种选择是为我们系统中可能发生的每个事件创建一个消息队列,例如:

user-service.user.deleted
user-service.user.updated
user-service.user.created
...
Run Code Online (Sandbox Code Playgroud)

我认为创建数百个消息队列不是正确的方法,不是吗?

我想使用Spring和这些不错的注释,例如:

  @RabbitListener(queues="user-service.user.deleted")
  public void handleEvent(UserDeletedEvent event){...
Run Code Online (Sandbox Code Playgroud)

将"用户服务通知"作为一个队列,然后将所有通知发送到该队列是不是更好?我仍然想将听众只注册到所有事件的子集,那么如何解决呢?

我的第二个问题:如果我想要侦听之前未创建的队列,我将在RabbitMQ中获得异常.我知道我可以使用AmqpAdmin"声明"一个队列,但是我是否应该为每个微服务中的数百个队列执行此操作,因为到目前为止总是会发生队列创建?

esb amqp rabbitmq spring-amqp

52
推荐指数
3
解决办法
2万
查看次数