标签: messaging

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万
查看次数

何时使用Spring Integration vs. Camel?

作为一名经验丰富的Spring用户,我假设Spring Integration在最近需要一些(JMS)消息传递功能的项目中更有意义(更多细节).使用Spring Integration几天之后,考虑到必须配置的通道数量,以便在适当的位置进行一些请求 - 响应(侦听不同的JMS队列)通信,它仍然会感觉很多配置开销.

因此,我正在寻找一些背景信息Camel与Spring Integration的不同之处,但似乎有很多信息,我发现:

问题是:你使用一个堆栈而不是另一个堆栈有什么经验?在哪些情况下你会推荐Camel是Spring Integration缺乏支持吗?你在哪里看到每个人的利弊?任何来自现实世界项目的建议都受到高度赞赏.

java messaging jms apache-camel spring-integration

127
推荐指数
7
解决办法
7万
查看次数

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万
查看次数

Message Broker和ESB之间的区别

我在Message Brokers和ESB上经历了不同的问题/文章(甚至在stackoverflow上).仍然不是一个线索,因为消息代理和ESB之间的CLEAR划分区别是什么?现在我在这里尝试比较产品,Websphere Broker和Mule ESB !!

首先,(任何版本)Webshere Broker是ESB吗?我们的IBM产品人员声称它是ESB!(我并不感到惊讶).

我的有限信息告诉我Message Broker在HUB-SPOKE模型上工作.然而,ESB适用于总线架构.那究竟是什么意思呢?我读过如果HUB失败(我猜不到)那么经纪人就完全失败了.这不是ESB的情况(所以那些人说).我在这里不明白的是"如果BUS怎么办"失败?

现在关于ESB和Brokers的常见内容是,它们提供路由,转换,编排等.所以如果它们都提供了这个,那么为什么我会选择一个而不是另一个.

另一个冲突领域是转型.与Message Brokers相比,ESB是否以不同的方式为其提供便利?我真的很喜欢这方面的一些见解.

现在谈论HORIZONTAL缩放.谁比谁更优秀?或者它们在复杂性(或任何其他因素)方面都具有相同的可扩展性.当然,Webshpere Broker会为每个盒子收费(更不用说每个cpu)了.我相信,即使是商业上的MULE ESB也不会这样做.暂且不说它的Cost部分,ESB扩展和Message Broker扩展的含义是什么.我碰巧知道您可以扩展到ESB中的服务级别.这是否可以在Message Broker中使用?

messaging esb service-broker

122
推荐指数
5
解决办法
10万
查看次数

.net服务总线建议?

我们需要具有发布/订阅功能的分布式架构消息系统/服务总线.有没有人对我们可以用于.net应用程序的框架有什么建议?

.net c# messaging distributed servicebus

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

为什么要使用AMQP/ZeroMQ/RabbitMQ

而不是写自己的图书馆.

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

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

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

messaging amqp rabbitmq zeromq

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

Objective C使用字符串动态调用方法

我只是想知道是否有办法调用一个方法,我用一个字符串动态建立方法的名称.

例如,我有一个名为loaddata的方法

-(void)loadData;
Run Code Online (Sandbox Code Playgroud)

打电话给我,我通常称之为

[self loadData];
Run Code Online (Sandbox Code Playgroud)

但我希望能够用字符串动态调用它,例如

NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];
Run Code Online (Sandbox Code Playgroud)

这是一个愚蠢的例子,但我希望你明白我的观点.我正在使用它来为我为我的IPad应用程序设置的数据绑定类.很难解释,但要解决它我需要弄清楚如何用字符串调用方法.

有任何想法吗?

谢谢

iphone methods messaging dynamic objective-c

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

什么是JMS有用?

我正在寻找JMS是一个很好的解决方案的问题的简单例子,也是JMS在这些情况下是一个很好的解决方案的原因.在过去,我只是简单地使用数据库作为将消息从A传递到B的方法,当消息不一定立即被B处理时.

这种系统的一个假设示例是,所有新注册的用户应在注册后24小时内收到欢迎电子邮件.为了便于论证,假设DB不记录每个用户注册的时间,而是将每个新用户的引用(外键)存储在pending_email表中.电子邮件发件人作业每24小时运行一次,向该表中的所有用户发送电子邮件,然后删除所有pending_email记录.

这似乎是应该使用JMS的那种问题,但我不清楚JMS对我所描述的方法有什么好处.DB方法的一个优点是消息是持久的.我知道JMS消息队列也可以保留,但在这种情况下,JMS和我描述的"数据库作为消息队列"方法似乎没什么区别?

我错过了什么? - 唐

java messaging jms

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

Kafka的基于键/值对的消息传递的目的是什么?

所有的例子卡夫卡 | 生产者显示ProducerRecord的键/值对不仅是相同的类型(所有示例都显示<String,String>),而是相同的.例如:

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));
Run Code Online (Sandbox Code Playgroud)

但是在Kafka文档中,我似乎无法找到解释键/值概念(及其基本目的/效用)的位置.在传统的消息传递(ActiveMQ,RabbitMQ等)中,我总是在特定的主题/队列/交换中发出消息.但Kafka是第一个似乎需要键/值对的代理,而不仅仅是一个正常的'字符串消息.

所以我问:要求生产者发送KV对的目的/用途是什么?

messaging message-queue key-value messagebroker apache-kafka

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

RabbitMQ示例:多个线程,通道和队列

我刚刚阅读了RabbitMQ的Java API文档,发现它非常丰富且直截了当.如何设置简单Channel的发布/消费的示例非常容易理解.但这是一个非常简单/基本的例子,它给我留下了一个重要的问题:如何设置1+ Channels来发布/消费多个队列?

比方说,我有上有3个队列中的RabbitMQ服务器:logging,security_eventscustomer_orders.因此,我们要么需要一个Channel能够发布/消费所有3个队列,或者更有可能需要3个独立的Channels队列,每个队列都专用于一个队列.

除此之外,RabbitMQ的最佳实践要求我们Channel为每个消费者线程设置1 个.对于这个例子,让我们说security_events是罚款,只有1消费者线程,但loggingcustomer_order都需要5个线程来处理卷.所以,如果我理解正确,这是否意味着我们需要:

  • Channel用于发布/消费的1 和1个消费者线程security_events; 和
  • Channels用于发布/消费的5 和5个消费者线程logging; 和
  • Channels用于发布/消费的5 和5个消费者线程customer_orders

如果我的理解在这里被误导,请先纠正我.无论哪种方式,一些厌倦战斗的RabbitMQ老手能帮助我"连接点"和一个体面的代码示例来设置符合我要求的发布者/消费者吗?提前致谢!

java messaging multithreading channel rabbitmq

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