MQ中队列管理器和队列的区别

Difference between Queue Manager and Queue in MQ

查看示例代码,我似乎需要 queue managerqueue name 通过代码设置 MQ。这些和我可以从哪里获得这些值有什么区别?有什么建议吗?

MQTopicConnectionFactory cf = new MQTopicConnectionFactory();

  // Config
  cf.setHostName("localhost");
  cf.setPort(1414);
  cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
  cf.setQueueManager("QM_thinkpad");
  cf.setChannel("SYSTEM.DEF.SVRCONN");

  MQTopicConnection connection = (MQTopicConnection) cf.createTopicConnection();
  MQTopicSession session = (MQTopicSession) connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
  MQTopic topic = (MQTopic) session.createTopic("topic://foo");
  MQTopicPublisher publisher =  (MQTopicPublisher) session.createPublisher(topic);
  MQTopicSubscriber subscriber = (MQTopicSubscriber) session.createSubscriber(topic); 

您连接到一个可能托管许多不同队列的队列管理器。所以是的,应用程序通常需要访问队列管理器,然后访问该队列管理器上的特定队列。我建议您可以查看 Stack Overflow info for the websphere-mq tag 以帮助您入门。这些对象的名称应该为您的应用程序所知 architect/developer 或者可以与 MQ 管理员确认。

A Queue 是消息的容器。连接到托管队列的队列管理器 的业务应用程序可以从队列中检索消息或将消息放入队列。我们有以下不同类型的队列:

  • 本地队列: 本地队列是队列和与队列关联的消息集的定义。托管队列的队列管理器在其本地队列中接收消息

  • 远程队列:远程队列定义是属于另一个队列管理器的队列在本地队列管理器上的定义。要将消息发送到远程队列管理器上的队列,发送方队列管理器必须具有目标队列的远程定义。

  • 别名队列:别名队列实际上不是队列;它们是现有队列的附加定义。您创建引用实际本地队列的别名队列定义,但您可以将别名队列定义命名为与本地队列(基本队列)不同的名称。这意味着您可以更改应用程序使用的队列,而无需更改应用程序;您只需创建一个指向新本地队列的别名队列定义。

Source

在连接队列之前,我们必须启动一个队列manager.The队列管理器有一个名字,应用程序可以使用这个名字连接到它。队列管理器拥有并管理 WebSphere MQ 使用的资源集。

  • 包含 WebSphere MQ 对象定义和消息数据的页面集
  • 用于在队列管理器发生故障时恢复消息和对象的日志
  • 处理器存储
  • 不同应用程序环境(CICS®、IMS™ 和 Batch)可以访问 WebSphere MQ 的连接 API
  • WebSphere MQ 通道启动器,允许您的 z/OS 系统上的 WebSphere MQ 与其他系统
  • 之间的通信

Source