热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MQ上可否实现单机上双qmgr之间以双通道通信?

因是与外单位合作开发,现因网络和硬件暂未到位。为了项目调试方便,设想在单一的机器上创建两个queuemanager,其中一个设为对方的qmgr另一个为我方的qmgr;程序也一个应用为我方程序
因是与外单位合作开发,现因网络和硬件暂未到位。为了项目调试方便,设想在单一的机器上创建两个queue manager,其中一个设为对方的

qmgr另一个为我方的qmgr;程序也一个应用为我方程序,另一个为模拟对方的程序 。到正式上线时只要修改我方qmgr的qremote相关地址即可

,程序不用修改。

环境:VMWARE workstation +redhat linux enterprise+ websphere MQ 6.0
请问这样是否可以。为何总是仅能启动一个listener和channel?另一个通道在启时就exit abnormally
我也配置mq的文件贴出,烦请大家看看有何问题,谢谢!

我方:
*    1.1定义接收队列
********************************************************************************
DEFINE QLOCAL ('BQL_SUBMIT_XXXX') +
REPLACE
********************************************************************************

*    1.2.定义接收通道
********************************************************************************
DEFINE CHANNEL('C2BCHL_SUBMIT_XXXX') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
REPLACE
********************************************************************************

*    2.1.定义传输队列
********************************************************************************
DEFINE QLOCAL('BTQU_SUBMIT_XXXX') +
USAGE(XMITQ) +
REPLACE
********************************************************************************

*    2.2.定义远程队列
********************************************************************************
DEFINE QREMOTE('BRQU_SUBMIT_XXXX') +
RNAME('CQL_SUBMIT_XXXX') +
RQMNAME('CQM_SUBMIT') +
XMITQ('BTQU_SUBMIT_XXXX') +
REPLACE
********************************************************************************

*    2.3.定义发送通道
********************************************************************************
DEFINE CHANNEL('B2CCHL_SUBMIT_XXXX') +
CHLTYPE(SDR) +
TRPTYPE(TCP) +
DISCINT(0) +
XMITQ(BTQU_SUBMIT_XXXX) +
*CONNAME(84.0.98.248)
CONNAME(127.0.0.1) +
REPLACE

********************************************************************************

*    3.1.定义死信队列
********************************************************************************
DEFINE QLOCAL('BQM_SUBMIT_DEATH') +
LIKE(SYSTEM.DEAD.LETTER.QUEUE) +
REPLACE
********************************************************************************

*    3.2.更改QM的缺省死信队列 和 MAXHANDS=5
********************************************************************************
ALTER QMGR DEADQ('BQM_SUBMIT_DEATH') MAXHANDS(5)
********************************************************************************

* 定义侦听器
DEFINE LISTENER(BLIS_FUND_SUBMIT) TRPTYPE (TCP) CONTROL (QMGR) +
PORT(1515) +
REPLACE

end


模拟对方
*    1.1定义接收队列
********************************************************************************
DEFINE QLOCAL ('CQL_SUBMIT_XXXX') +
REPLACE
********************************************************************************

*    1.2.定义接收通道
********************************************************************************
DEFINE CHANNEL('B2CCHL_SUBMIT_XXXX') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
REPLACE
********************************************************************************

*    2.1.定义传输队列
********************************************************************************
DEFINE QLOCAL('CTQU_SUBMIT_XXXX') +
USAGE(XMITQ) +
REPLACE
********************************************************************************

*    2.2.定义远程队列
********************************************************************************
DEFINE QREMOTE('CRQU_SUBMIT_XXXX') +
RNAME('BQL_SUBMIT_XXXX') +
RQMNAME('BQM_FUND_SUBMIT') +
XMITQ('CTQU_SUBMIT_XXXX') +
REPLACE
********************************************************************************

*    2.3.定义发送通道
********************************************************************************
DEFINE CHANNEL('C2BCHL_SUBMIT_XXXX') +
CHLTYPE(SDR) +
TRPTYPE(TCP) +
DISCINT(0) +
XMITQ(CTQU_SUBMIT_XXXX) +
*CONNAME(84.0.98.248) +
CONNAME(127.0.0.1(1515)) +
REPLACE
********************************************************************************

*    3.1.定义死信队列
********************************************************************************
DEFINE QLOCAL('CQM_SUBMIT_DEATH') +
LIKE(SYSTEM.DEAD.LETTER.QUEUE) +
REPLACE
********************************************************************************

*    3.2.更改QM的缺省死信队列 和 MAXHANDS=5
********************************************************************************
ALTER QMGR DEADQ('CQM_SUBMIT_DEATH') MAXHANDS(5)
********************************************************************************

* 定义侦听器
DEFINE LISTENER(CLIS_FUND_SUBMIT) TRPTYPE (TCP) CONTROL (QMGR) +
REPLACE

end

用shell跑如下步骤:


endmqlsr -m BQM_FUND_SUBMIT

endmqm -p BQM_FUND_SUBMIT

dltmqm BQM_FUND_SUBMIT

crtmqm  BQM_FUND_SUBMIT

strmqm BQM_FUND_SUBMIT

runmqsc BQM_FUND_SUBMIT < defineMQbank > BQM.log

runmqlsr -m BQM_FUND_SUBMIT -t tcp &

sleep 10
#########################################################

endmqlsr -m CQM_SUBMIT

endmqm -p CQM_SUBMIT

dltmqm CQM_SUBMIT

crtmqm  CQM_SUBMIT

strmqm CQM_SUBMIT

runmqsc CQM_SUBMIT < defineMQgjj > CQM.log

runmqlsr -m CQM_SUBMIT -t tcp &

sleep 10

runmqchl -m CQM_SUBMIT -c C2BCHL_SUBMIT_XXXX &

runmqchl -m BQM_FUND_SUBMIT -c B2CCHL_SUBMIT_XXXX &


5 个解决方案

#1


可以的,环境配置简单,不过快2年不用 MQ, 这命令看不明白参数了。
TCP Listener 的启动跟 Channel 没有关系的,你先解决 TCP Listener 的问题先。

或许因为 TCP Listener 导致另外一个方向的 Channel 启动不了呢。
看你的连接名和通道名配对好像都一致啊。

我刚才用你的 MQSC 脚本在我的 MQ v7 上试了下,我发现定义 Sender 通道时不用 127.0.0.1(1515), 这个连接名我也记得以前是说对 TCP / IP 来说是 IP(Port) 格式,为什么用 MQSC 时报错,我用 127.0.0.1 创建成功了然后再到 MQ Explorer 中改成 127.0.0.1(1515) 后测试了一下成功连接了。我测试了一下,消息到达了另外一个 QM 上了。难道这是 MQ v7 解析 MQSC 脚本时的 bug?

我测试成功的。配置没错,有可能是 listener 启动失败造成的。另外你那边有我说的这个 sender channel 创建失败的消息吗?

我只用过 Windows 上的 MQ 它的异常信息在 Windows 事件查看器里可以看到 Linux 不知道怎么看 MQ 服务器事件。

#2


感谢楼上的回答。我们现在通了,之所以不通的原因是有两台机(都是VMWARE的虚机设为A、B)原先是配相互间通讯的,后来我的一台改为本机内互通,但是B机上的MQ仍然开着,所以每次B机起通道的时候他就自动联过来。

另外在linux下runmqlsr若不指定端口则会以1414启动listener,即使在define的时候指定端口貌似也没用。

#3


感谢楼上的回答。我们现在通了,之所以不通的原因是有两台机(都是VMWARE的虚机设为A、B)原先是配相互间通讯的,后来我的一台改为本机内互通,但是B机上的MQ仍然开着,所以每次B机起通道的时候他就自动联过来。所以B机再起第二个channel的时候就连不上了显示ended abnormally。

另外在linux下runmqlsr若不指定端口则会以1414启动listener,即使在define listener的时候已经指定端口貌似也没用。

#4


以上两次发帖,逻辑并不正确,修改并回复如下。
------------------------------------------------
感谢楼上的回答。我们现在通了,之所以不通的原因是有两台机(都是VMWARE的虚机设为A、B)原先是配相互间通讯的,后来我的一台改为本机A内互通,但是B机上的MQ仍然开着,所以每次A机起通道的时候他就自动联过来。所以A机再起第二个channel的时候就连不上了,显示某通道 ended abnormally。

另外在linux下runmqlsr若不指定端口则会以1414启动listener,即使在define listener的时候已经指定端口貌似也没用。

#5


看到经典回答,不论怎样都要顶上一下

推荐阅读
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
author-avatar
唯心任
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有