setup_mq.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/bin/bash
  2. # ============================================================
  3. # 保税维修关务对接 - 我方 IBM MQ 创建脚本
  4. # 环境:IBM MQ 9.x (Linux)
  5. # 执行用户:mqm (需先 su - mqm)
  6. # 我方MQ信息:
  7. # 队列管理器名称:ERP_QM
  8. # 监听端口:1414
  9. # 远程IP:117.40.187.228
  10. # 对接方MQ信息:
  11. # 队列管理器:GDHXMQ
  12. # 远程IP:Port:59.55.120.119(40043)
  13. # 本地队列(对方接收):QL_GDHX_ERP
  14. # 接收方通道:GDHX_ERP
  15. # ============================================================
  16. QMGR=ERP_QM
  17. LISTENER_PORT=1414
  18. echo "===== 1. 创建队列管理器 ====="
  19. crtmqm -u SYSTEM.DEAD.LETTER.QUEUE $QMGR
  20. echo "===== 2. 启动队列管理器 ====="
  21. strmqm $QMGR
  22. echo "===== 3. 执行 MQSC 命令创建对象 ====="
  23. runmqsc $QMGR << 'MQSC_EOF'
  24. * --- 3.1 创建监听器 ---
  25. DEFINE LISTENER(ERP_LSR) TRPTYPE(TCP) PORT(1414) CONTROL(QMGR) REPLACE
  26. START LISTENER(ERP_LSR)
  27. * --- 3.2 创建死信队列 ---
  28. DEFINE QLOCAL(SYSTEM.DEAD.LETTER.QUEUE) REPLACE
  29. * --- 3.3 创建我方接收队列(海关回执 WO200 写入此队列) ---
  30. * 海关→企业 的回执报文落地队列
  31. DEFINE QLOCAL(QL_ERP_RECEIVE) +
  32. DESCR('ERP接收海关回执队列-WO200') +
  33. MAXDEPTH(10000) +
  34. MAXMSGL(104857600) +
  35. REPLACE
  36. * --- 3.4 创建远程队列定义(指向对方队列管理器 GDHXMQ 的本地队列 QL_GDHX_ERP)---
  37. * 企业→海关 的申报报文通过此远程队列发送
  38. DEFINE QREMOTE(QR_ERP_TO_GDHX) +
  39. DESCR('ERP发往海关申报队列-远程定义') +
  40. RNAME(QL_GDHX_ERP) +
  41. RQMNAME(GDHXMQ) +
  42. XMITQ(XQ_GDHX) +
  43. REPLACE
  44. * --- 3.5 创建传输队列 ---
  45. DEFINE QLOCAL(XQ_GDHX) +
  46. DESCR('发往GDHXMQ的传输队列') +
  47. USAGE(XMITQ) +
  48. MAXDEPTH(10000) +
  49. MAXMSGL(104857600) +
  50. REPLACE
  51. * --- 3.6 创建发送方通道(我方→对方)---
  52. * 通道名需与对方接收方通道名一致:GDHX_ERP
  53. DEFINE CHANNEL(GDHX_ERP) +
  54. CHLTYPE(SDR) +
  55. TRPTYPE(TCP) +
  56. CONNAME('59.55.120.119(40043)') +
  57. XMITQ(XQ_GDHX) +
  58. DISCINT(0) +
  59. SHORTRTY(10) +
  60. SHORTTMR(60) +
  61. LONGRTY(999999999) +
  62. LONGTMR(1200) +
  63. HBINT(300) +
  64. MAXMSGL(104857600) +
  65. REPLACE
  66. * --- 3.7 创建接收方通道(对方→我方)---
  67. * 通道名由对方发送方通道决定,需与对方约定,暂命名 ERP_GDHX
  68. DEFINE CHANNEL(ERP_GDHX) +
  69. CHLTYPE(RCVR) +
  70. TRPTYPE(TCP) +
  71. MAXMSGL(104857600) +
  72. REPLACE
  73. * --- 3.8 创建服务器连接通道(供Java客户端连接)---
  74. DEFINE CHANNEL(ERP_SVRCONN) +
  75. CHLTYPE(SVRCONN) +
  76. TRPTYPE(TCP) +
  77. MAXMSGL(104857600) +
  78. REPLACE
  79. * --- 3.9 通道认证配置(生产环境建议收紧)---
  80. * 允许 mqm 用户通过 SVRCONN 连接
  81. SET CHLAUTH(ERP_SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody') ACTION(REPLACE)
  82. * 允许所有IP连接(测试用,生产应限制为对接方IP)
  83. SET CHLAUTH(ERP_SVRCONN) TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) ACTION(REPLACE)
  84. * --- 3.10 启动发送方通道 ---
  85. START CHANNEL(GDHX_ERP)
  86. MQSC_EOF
  87. echo "===== 4. 验证对象 ====="
  88. echo "--- 队列管理器状态 ---"
  89. dspmq -m $QMGR
  90. echo "--- 队列列表 ---"
  91. echo "DISPLAY QLOCAL(*) WHERE(CURDEPTH NE 0)" | runmqsc $QMGR
  92. echo "--- 通道状态 ---"
  93. echo "DISPLAY CHSTATUS(*)" | runmqsc $QMGR
  94. echo ""
  95. echo "===== 创建完成 ====="
  96. echo "队列管理器: $QMGR"
  97. echo "监听端口: $LISTENER_PORT"
  98. echo "接收队列: QL_ERP_RECEIVE (海关回执WO200)"
  99. echo "发送远程队列: QR_ERP_TO_GDHX (企业申报→海关)"
  100. echo "发送通道: GDHX_ERP (→ 59.55.120.119:40043 / GDHXMQ)"
  101. echo "接收通道: ERP_GDHX (需与对方确认通道名)"
  102. echo "SVRCONN通道: ERP_SVRCONN (Java客户端连接用)"
  103. echo ""
  104. echo "注意:"
  105. echo " 1. 对方需在其 GDHXMQ 上创建接收方通道 GDHX_ERP"
  106. echo " 2. 对方需创建发送方通道指向我方 ERP_QM 的 ERP_GDHX 接收通道"
  107. echo " 3. 防火墙需开放我方1414、对方40043端口双向通信"
  108. echo " 4. mqm用户密码: 400fdf7051ccb4a34 (Java连接用)"