标签: mq

是否有可以在Java进程中嵌入的MQ服务器?

我正在为我的团队的一个应用程序研究排队解决方案.理想情况下,我们希望能够将其配置为轻量级进程内代理(用于线程之间的低吞吐量消息传递)和外部代理.是否有可以执行此操作的MQ服务器?大多数似乎都需要将设置作为外部实体.ZeroMQ似乎最接近于进程内解决方案,但它似乎更像是"类固醇上的UDP套接字",我们需要可靠的交付.

java jms message-queue amqp mq

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

队列管理器和消息代理之间的区别

Websphere Message Broker和队列管理器之间有什么区别.我想队列管理器将消息放入队列,将消息从队列中取出,将消息移到后退队列等等.那么代理的工作是什么?

它位于发布者和队列管理器之间,还是位于消费者和队列管理器之间?

websphere middleware messagebroker mq ibm-mq

18
推荐指数
1
解决办法
3万
查看次数

对于低端设置,RabbitMQ有什么好的替代品吗?

我现在已经在一些设置中使用RabbitMQ,我无法摆脱必须有更容易设置的东西的感觉.尽管它很方便,但很难证明MQ只能处理每天处理几千条消息的解决方案,这仅仅是因为维护RabbitMQ是如此之多.

有没有人通过简单的安装和维护过程了解AMQP实施?

对于那些不了解它的人,RabbitMQ是用Erlang编写的AMQP实现.它应该是非常稳定的,但只有你对Erlang有足够的了解才能避免它的问题.无论是内存限制还是主机名的更改,总是需要深入了解它.

message-queue amqp rabbitmq mq

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

消息通道和消息队列本身有什么区别?

消息通道和消息队列本身有什么区别?

他们是不同的东西.队列实际上保存将以FIFO方式处理(推送到侦听器)的消息.

信道是传输消息的媒介.
这究竟是什么意思?在一本书"企业集成模式"中,它说:

使用消息通道连接应用程序,其中一个应用程序将信息写入通道,另一个应用程序从通道读取该信息.

这是否意味着此消息通道实际上将队列从消息的生产者和消费者中抽象出来?但它真的不对吗?当生产者必须将消息放入队列时,它实际上指定了它想要连接的队列管理器和队列名称.

还有通道中不同协议的概念和通道中的不同数据格式,您可能为每个协议使用单独的通道,也可能是每种数据格式(XML,JSON等)的单独通道.这将有助于不同的队列从不同的频道中获取.但为什么不直接为不同的数据格式调用不同的队列?渠道的作用究竟是什么?它只是一个连接?

我是MQM的全新人物.我刚刚被分配到这个涉及制作和消费消息的项目,我正试图围绕这个问题.

messaging message-queue mq ibm-mq

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

akka演员中的消息传递顺序

我是Akka的新手,在参考手册中找不到答案.

假设我们有远程actor分布在3台机器(A,B,C)的集群中,其中一个actor存在于每台机器上,而其他actor则有actorRef到另外两台机器,即:

Machine A:
A (real actor)
-> B (ref)
-> C (ref)

Machine B:
-> A (ref)
B (real actor)
-> C (ref)

Machine C:
-> A (ref)
-> B (ref)
C (real actor)
Run Code Online (Sandbox Code Playgroud)

Actor A执行以下代码:

bRef ! msg1
bRef ! msg2
Run Code Online (Sandbox Code Playgroud)

Actor B在消息处理程序中执行以下代码:

case msg1 => 
    cRef ! msg3
    aRef ! msg4
Run Code Online (Sandbox Code Playgroud)

Actor C在消息处理程序中执行以下代码:

case msg3 => 
    aRef ! msg5
Run Code Online (Sandbox Code Playgroud)

我可以做出以下假设(如果有的话):

  1. 演员B在获得msg2之前得到msg1

  2. 演员A在获得msg4之前获得msg5

而后续问题可能导致了解上述内容:是否发送了消息!运营商是通过网络真正异步还是等到接收邮箱获得它?即行

bRef ! msg1
Run Code Online (Sandbox Code Playgroud)

阻止,直到演员B在其邮箱中获取消息,或者它是否产生处理传递并继续执行的线程

bRef ! msg2
Run Code Online (Sandbox Code Playgroud)

在它甚至知道演员B得到msg1之前?

scala messages mq actor akka

15
推荐指数
1
解决办法
2770
查看次数

数百万主题的消息队列解决方案

我正在考虑系统将通知多个消费者有关一群物体发生的事件.每个订阅者应该能够订阅发生在零个或多个对象上的事件,多个订阅者应该能够接收有关发生在单个对象上的事件的信息.

我认为在这种情况下,某些消息排队系统是合适的,但我不知道如何处理我将拥有数百万个对象的事实 - 对每个对象使用单独的主题听起来不太好[或者是它正好?].

你能否建议我应该采取的方法,甚至可能是一些合理的开源消息排队系统?

更多细节:

  • 会有成千上万的订阅者[意思不是很多]
  • 订阅者将订阅每个数十或数百个对象,
  • 将有约5-20万个物体,
  • 事件本身不必携带任何信息.只是该对象被更改的信息就足够了,
  • 绝大多数对象永远不会订阅,
  • 事件以每秒几百个的最大速率发生,
  • 理想情况下,服务器应该在linux下运行,能够通过http long-poll与生态系统的其余部分集成[使用节点js?码头下的延续?].

在此先感谢您的反馈,并抱歉有些模糊的问题!

message-queue mq ibm-mq

9
推荐指数
2
解决办法
2275
查看次数

尝试使用PHP连接到MQ; 差不多了

所以我花了这么多天试图解决这个似乎已被遗忘的事情,因为两个PECL扩展中没有一个(SAM和mqseries)已经更新了很长时间.我已经尝试过两者并且mqseries似乎让我在这一点上最远,因为SAM拒绝让我连接,即使MQ从命令行完美运行.我已经成功创建了与QueueManager的连接,并且在下一步(MQOPEN)中我惨遭失败:

$mqcno = array(
        'Version' => MQSERIES_MQCNO_VERSION_2,
        'Options' => MQSERIES_MQCNO_STANDARD_BINDING,
        'MQCD' => array('ChannelName' => '[channel]',
        'ConnectionName' => '[ipnumber]([port])',
        'TransportType' => MQSERIES_MQXPT_TCP)
    );

mqseries_connx('MQED', $mqcno, $conn, $comp_code,$reason);
if ($comp_code !== MQSERIES_MQCC_OK) {
    printf("Connx CompCode:%d Reason:%d Text:%s<br>\n", $comp_code, $reason, $reason);
    exit;
}

$mqods = array('ObjectName'=>'MYPUTQUEUE', 'ObjectType'=>MQOT_Q, 'ObjectQMgrName'=>'MYQUEUEMANAGER');
mqseries_open($conn, $mqods, 
          MQSERIES_MQOO_FAIL_IF_QUIESCING | MQSERIES_MQOO_OUTPUT,
          $obj, $comp_code,$reason);
Run Code Online (Sandbox Code Playgroud)

这导致$ reason被填充为2044,转换为MQRC_OD_ERROR,或者英文:'在MQOPEN或MQPUT1调用中,对象描述符MQOD无效'.

所以问题是,我的MQOD出了什么问题?

更新#1:此时此问题尚未解决.我从头开始重建项目,以便在构建时解决任何问题.我仍然坚持MQOPEN返回2044.样本仍然从CLI运行完美,所以这绝对与PECL扩展的安装有关.如果有人在最​​近的64位PHP5环境中成功安装并运行PHP对MQ,请告诉我...

更新#2:MQPUT1完美地解决了我无法收到响应的问题.在这一点上,它只是MQOPEN不起作用.问题是; 什么导致MQOPEN在MQPUT1工作时返回2044,我理解包括MQOPEN?

php integration mq ibm-mq

8
推荐指数
1
解决办法
2076
查看次数

如何获取Websphere MQ连接状态以及如何重置连接:

1.)从.net客户端,我如何测试客户端是否连接到服务器(即可以发送和接收)是的,我可以在try块内发送消息并捕获随后的异常,但我希望更优雅的解决方案.

2)如何打开,关闭和重新打开连接?在我尝试解决上面的问题1时,我发现如果我打开连接然后调用connection.Close()我无法从连接工厂获得另一个连接(请参阅下面的代码片段).我收到错误消息XMSCC0008

我使用的是非常标准的vanilla MQ配置.以下是我的客户端连接方式:

ISession session = MQAccess.GetSession(MQAccess.Connection);
IDestination destination = session.CreateTopic(SubTopicName);
Consumer = MQAccess.GetConsumer(session, destination);
Consumer.MessageListener = new MessageListener(HandleMQSubEvent);
MQAccess.Connection.Start();
Run Code Online (Sandbox Code Playgroud)

其中MQAccess是一个小实用程序类.

编辑了添加MQAccess代码的问题:

public static class MQAccess
{
    public static readonly MQConfigurationSectionHandler ConfigSettings;
    public static readonly IConnectionFactory ConnectionFactory;

    private static readonly IConnection connection;
    public static IConnection Connection
    {
        get { return connection; }
    }

    static MQAccess()
    {
        ConfigSettings = (MQConfigurationSectionHandler)
            ConfigurationManager.GetSection("mq-configuration");

        XMSFactoryFactory factory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
        ConnectionFactory = factory.CreateConnectionFactory();
        ConnectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, ConfigSettings.Hostname);
        ConnectionFactory.SetIntProperty(XMSC.WMQ_PORT, ConfigSettings.Port);
        ConnectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, ConfigSettings.Channel);

        if (ConfigSettings.QueueManager == string.Empty)
        {
            ConnectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, …
Run Code Online (Sandbox Code Playgroud)

.net c# websphere mq ibm-mq

8
推荐指数
2
解决办法
7959
查看次数

最高效 - 性能明智 - 用于JVM间通信

我有一个Java应用程序,需要在不同进程之间进行通信.进程可以在相同的JVM或不同的JVM中运行,但可以在同一台机器上运行.

我的应用程序需要将"消息"提交给另一个进程(相同或不同的JVM)并忘记它.类似于IBM"MQ"之类的消息传递队列,但是简单,只使用内存,没有IO到硬盘以获得性能提升.

我不确定Performance prescriptive的最佳方法是什么.

  • 我想知道RMI在性能方面是否有效,我认为它需要一些开销.
  • 那么使用本地主机的TCP/IP套接字呢?

还有其他想法吗?

java performance ipc rmi mq

8
推荐指数
1
解决办法
8660
查看次数

使用RabbitMQ时,每个远程方法创建一个队列?

让我们暂时接受一下,实现RPC over消息队列(如RabbitMQ)并不是一个可怕的想法 - 有时在与遗留系统接口时可能是必要的.

在RPC over RabbitMQ的情况下,客户端向代理发送消息,代理将消息路由到工作者,工作者通过代理将结果返回给客户端.但是,如果一个worker实现了多个远程方法,那么不同的调用需要路由到不同的监听器.

这种情况下的一般做法是什么?所有RPC over MQ示例仅显示一个远程方法.将方法名称设置为路由规则/队列名称会很好很容易,但我不知道这是否是正确的方法.

rpc rabbitmq mq

8
推荐指数
2
解决办法
3906
查看次数