在我的团队工作中,我们使用IBM MQ技术进行跨应用程序通信.我最近看过Hacker News和其他关于RabbitMQ等其他MQ技术的地方.我对它是什么有一个基本的了解(一个常见的检查区域来放置和获取消息),但我想知道它究竟擅长什么?我怎么知道我想在哪里使用它以及何时使用它?为什么不坚持使用更基本的进程间消息传递形式?
我正在尝试开发一个JMS 独立应用程序来读取和写入MQSeries上的Queue.我的老板让我使用纯java JMS(不是ibm.mq lib)来做到这一点.
以下是进行jms连接所需的信息:
mq.hostname=10.10.10.10
mq.channel=API.CLIENTCHL
mq.queueManager=MQPETAPI
mq.port=1422
Run Code Online (Sandbox Code Playgroud)
你知道怎么做吗?或者你有任何链接教我这样做.
如果我们使用"临时队列"使用JMS请求/回复机制,那么该代码是否可扩展?
截至目前,我们不知道我们是否每秒支持100个请求,或者每秒支持1000个请求.
下面的代码是我正在考虑实现的.它以"同步"方式使用JMS.关键部分是创建"消费者"以指向为此会话创建的"临时队列"的位置.我无法弄清楚使用这种临时队列是否是一种可扩展的设计.
destination = session.createQueue("queue:///Q1");
producer = session.createProducer(destination);
tempDestination = session.createTemporaryQueue();
consumer = session.createConsumer(tempDestination);
long uniqueNumber = System.currentTimeMillis() % 1000;
TextMessage message = session
.createTextMessage("SimpleRequestor: Your lucky number today is " + uniqueNumber);
// Set the JMSReplyTo
message.setJMSReplyTo(tempDestination);
// Start the connection
connection.start();
// And, send the request
producer.send(message);
System.out.println("Sent message:\n" + message);
// Now, receive the reply
Message receivedMessage = consumer.receive(15000); // in ms or 15 seconds
System.out.println("\nReceived message:\n" + receivedMessage);
Run Code Online (Sandbox Code Playgroud)
更新:
我遇到了另一种模式,看到这个博客 的想法是使用'常规'队列进行发送和接收.但是对于"同步"调用,为了获得所需的响应(即匹配请求),您将创建一个使用"选择器"监听接收队列的消费者.
脚步:
// 1. …Run Code Online (Sandbox Code Playgroud) 我的理解是:
IBM的这个图表很有帮助:

会话bean和实体bean [又名MDP]允许您发送JMS消息并同步接收它们,但不是异步接收它们.为避免占用服务器资源,您可能不希望在服务器端组件中使用阻塞同步接收.要异步接收消息,请使用消息驱动的bean [MDB].
所以到目前为止我不满意的清单是:
我的问题是:还有其他差异吗?你能澄清一下这个区别吗?
参考文献:
死信队列和退出队列有什么区别?
在WebSphere MQ术语和应用程序服务器方面.
所有J2EE/JEE应用程序服务器都有一个MQ提供程序它们是否也有一个死信队列的构造,或者是特定于WebSphere MQ的东西?
我对退出队列的理解如下:
如果MQ在指定次数的尝试后无法将消息传递到目标,则会将消息移至后退队列.
我对死信队列没有清楚的了解.
感谢任何帮助.
Websphere Message Broker和队列管理器之间有什么区别.我想队列管理器将消息放入队列,将消息从队列中取出,将消息移到后退队列等等.那么代理的工作是什么?
它位于发布者和队列管理器之间,还是位于消费者和队列管理器之间?
消息通道和消息队列本身有什么区别?
他们是不同的东西.队列实际上保存将以FIFO方式处理(推送到侦听器)的消息.
信道是传输消息的媒介.
这究竟是什么意思?在一本书"企业集成模式"中,它说:
使用消息通道连接应用程序,其中一个应用程序将信息写入通道,另一个应用程序从通道读取该信息.
这是否意味着此消息通道实际上将队列从消息的生产者和消费者中抽象出来?但它真的不对吗?当生产者必须将消息放入队列时,它实际上指定了它想要连接的队列管理器和队列名称.
还有通道中不同协议的概念和通道中的不同数据格式,您可能为每个协议使用单独的通道,也可能是每种数据格式(XML,JSON等)的单独通道.这将有助于不同的队列从不同的频道中获取.但为什么不直接为不同的数据格式调用不同的队列?渠道的作用究竟是什么?它只是一个连接?
我是MQM的全新人物.我刚刚被分配到这个涉及制作和消费消息的项目,我正试图围绕这个问题.
我在连接到IBM MQ时遇到此错误.我知道这是因为权限,但有没有办法只检查与IBM MQ的连接?
请建议.
我们的Java应用程序通过Weblogic JMS消息桥写入MQ Series队列.实际的MQ Series连接/队列详细信息存储在应用服务器上的MQ Series .bindings文件中.我从来没有真正了解绑定文件以及所有条目的含义.有人可以提供指导来理解这个文件吗?