当前位置: 首页 > 知识库问答 >
问题:

每个主机/端口是否允许多个队列管理器?

宋稳
2023-03-14
MQQueueConnectionFactory factory = new MQQueueConnectionFactory();

factory.setQueueManager(queueManager);

factory.setTransportType(CommonConstants.WMQ_CM_CLIENT);
factory.setHostName(host);
factory.setPort(port);
factory.setChannel(channel);

特别是我们设置队列管理器的名称。从这个模式来看,队列管理器名称似乎是完全标识队列管理器所必需的。人们可能会得出结论,在同一主机和端口上,不同的队列管理器可能会监听。这可能吗?

但是,当设置连接名称列表以指定重新连接目标时,不需要队列管理器名称:

public void setConnectionNameList(java.lang.String hosts)抛出javax.jms.jmsException

    null

我们有两个队列管理器监听具有不同名称的不同主机/端口。我们希望使用这些队列管理器中的一个作为连接名称列表中的故障转移管理器。问题是:队列管理器是否仅由主机和端口唯一标识?

共有1个答案

徐涵亮
2023-03-14

这个问题有很多要解释的地方,所以让我们一次一个项目来回答。

只能有一个侦听器绑定到特定的端口和接口。因此,如果监听器是杂乱的(监听所有接口),每个端口只有一个。如果主机有多个接口,可以在每个接口的同一个端口上绑定不同的监听器。由于侦听器是队列管理器的子进程,因此只有一个QMgr可以侦听给定的地址(端口)组合。

QMgr的名称不需要出现在QMgr接收的连接请求中。如果QMgr名称为空,则连接成功地使用连接请求所寻址的任何QMgr,前提是QMgr没有因为错误的密码、证书验证或其他错误而拒绝它。但是,如果连接请求中有QMgr名称,则该名称必须与尝试连接的QMgr的名称匹配。

但是还有另一种类型的HA,其中有多个等效的QMGR,每个QMGR具有不同的名称,客户端可以连接到这些QMGR。当客户机从一个记录系统请求信息,但它本身不是一个记录系统时,这种情况尤其如此。这样的客户机不需要监听众所周知的队列。取而代之的是,它连接到客户端连接QMgrs的任何一层,创建一个动态应答队列,并将请求发送到MQ网络某处集群队列上的记录监听系统。在这个场景中,客户机不指定QMgr名称,因此利用MQ接受它所连接到的任何QMgr的行为。

最后,MQ长期以来一直有客户机通道定义表或CCDT文件。在我们有多实例conname之前,CCDT提供了连接到多个QMGR中任何一个的功能。MQ管理员没有在CCDT中放置QMgr名称,而是放置符号名称。例如,如果有3个用于薪资处理的QMgr,那么它们的CCDT条目中的QMgr名称可能是PAY01、PAY02和PAY03,其中没有一个与实际的QMgr名称匹配。每个QMGR都有一个地址(端口)指向三个QMGR中的一个。然后开发人员指定一个QMgr名称*pay,MQ客户机将在所有CCDT条目中选择前3个字符与“pay”匹配的条目。使用此选项和其他一些选项,可以让MQ客户端驱动器重新连接,但让MQ客户端存根封装是否在目的地之间循环、重试最后连接的地址或其他逻辑。

从这个模式来看,队列管理器名称似乎是完全标识队列管理器所必需的。人们可能会得出结论,在同一主机和端口上,不同的队列管理器可能会监听。这可能吗?

没有。

我们有两个队列管理器监听具有不同名称的不同主机/端口。我们希望使用这些队列管理器中的一个作为连接名称列表中的故障转移管理器。问题是:队列管理器是否仅由主机和端口唯一标识?

确保QMgr名称在请求中为空,并在conname中指定address(port)组合,您就可以开始了。

    null
 类似资料:
  • 因此,我们决定在向微服务体系结构的迁移中使用RabbitMQ作为消息/事件总线,但我们无法确定放置队列的最佳方式,我们有两种选择: 请记住,所有队列、交换和绑定都将通过发布或订阅的服务动态完成。

  • > 当同一主机上的两个进程使用网络套接字通信时,它们的套接字必须使用不同的端口吗? 我想是的,因为套接字由IP地址和端口号标识。如果进程的套接字使用相同的端口,则无法区分它们的套接字,对吗? 但是一个主机可以有多个网络接口,所以有多个IP地址。同一个主机上的多个网络接口是否可以共享一个端口,从而使两个套接字共享同一个端口? 例如,SSH本地端口转发由以下选项指定: 然后本地主机(SSH客户端运行的

  • 我们今天正在就最佳解决方案进行辩论,但双方都没有达成协议。 我们有一种吸收“信息”的产品。每次我们得到一个新的消息,我们需要将这些数据发送到3个服务进行处理。 服务#1要求数据采用特殊格式。为此,我们将数据放入服务从中读取的SQS中。 服务#2读取消息字段:[a,b,c]并以protofuf格式发送。 服务#3读取消息字段:[a,b,c,d,e],也是protobuf。 编写服务#2的人不想这样做

  • 问题内容: 在所有任务中,我有一些必须按顺序处理(它们永远不能同时运行,必须按顺序处理)。 我实现了为必须串行执行的每组任务创建一个具有单个线程的独立线程池的功能。它有效,但我没有足够的资源。我无法控制组的数量,因此最终可能会产生大量同时运行的线程。 有什么办法可以通过单个线程池完成此任务?是否有一个带有多个阻塞队列的线程池,我可以确保每个队列的串行执行? 编辑: 只是强调我在第二段中所说的:我已

  • 问题内容: JPA规范是否允许对非主键列的简单引用? 我想在引用中使用在Countrys表上有一个简单的替代/自然键(UNIQUE,NOT NULL)列iso_code,但是Eclipse的Dali显示了验证错误,并且Hibernate抛出了MappingException。 是否允许这种常见情况? 问题答案: @axtavt:看来您的答案不正确。我刚刚收到了来自“ Pro JPA 2.0”作者的

  • 我正在使用Azure环境并在其中开发。网的 我正在运行一个web应用程序(ClientApp),它获取客户端数据以执行一系列计算。这些计算是性能密集型的,因此它们在单独的web应用程序(CalcApp)上运行。 当前,ClientApp将计算请求发送给CalcApp。来自每个客户机的请求被放入一个公共队列中,并一次运行一个,即FIFO。我的目标是为每个客户机创建单独的队列,并同时运行多个计算。 我