ESB

1import com.ibm.mq.*; 2import com.ibm.msg.client.wmq.v6.base.internal.MQC; 3import java.io.IOException; 4/** 5 * Created by EalenXie on 2017/2/17. 6 */ 7public class MessageByMQ { 8 //定义队列管理器和队列的名称 9 private static String qmName ; 10 private static String qName ; 11 private static MQQueueManager qMgr ; 12 static { 13 /** 14 * 设置环境: 15 * MQEnvironment中包含控制MQQueueManager对象中的环境的构成的静态变量 16 * MQEnvironment的值的设定会在MQQueueManager的构造函数加载的时候起作用 17 * 因此必须在建立MQQueueManager对象之前设定MQEnvironment中的值. 18 */ 19 MQEnvironment.hostname = "127.0.0.1"; //MQ服务器的IP地址 20 MQEnvironment.channel = "CHL_QM1_SERVER"; //服务器连接的通道 21 //服务器MQ服务使用的编码1381代表GBK、1208代表UTF-8 22 MQEnvironment.CCSID = 1381; 23 MQEnvironment.port = 1415; //MQ 端口 24 qmName = "QM1"; //MQ 的队列管理器名称 25 qName = "QM1_LOCAL"; //MQ 远程队列的名称 26 try { 27 //定义并初始化队列管理器对象并连接 28 //MQQueueManager 可以被多线程共享,但是从MQ 获取信息的时候是同步的,任何时候只有一个线程可以和MQ 通信。 29 qMgr = new MQQueueManager(qmName); 30 } catch (MQException e) { 31 // TODO Auto-generated catch block 32 System.out.println("初使化MQ出错"); 33 e.printStackTrace(); 34 } 35 } 36 /** 37 * 往MQ发送消息 38 * 39 * @param message 40 * @return 41 */ 42 public static int sendMessage(String message) { 43 int result = 0; 44 try { 45 //设置将要连接的队列属性 46 //目标为远程队列,所有这里不可以用MQOO_INPUT_AS_Q_DEF属性 47 //int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 48 //以下选项可适合远程队列与本地队列 49 int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING; 50 //连接队列 51 //MQQueue provides inquire, set, put and get operations for WebSphere MQ queues. 52 //The inquire and set capabilities are inherited from MQManagedObject. 53 /*关闭了就重新打开*/ 54 if (qMgr == null || !qMgr.isConnected()) { 55 qMgr = new MQQueueManager(qmName); 56 } 57 MQQueue queue = qMgr.accessQueue(qName, openOptions); 58 //定义一个简单的消息 59 MQMessage putMessage = new MQMessage(); 60 //将数据放入消息缓冲区 61 putMessage.writeUTF(message); 62 //设置写入消息的属性(默认属性) 63 MQPutMessageOptions pmo = new MQPutMessageOptions(); 64 //将消息写入队列 65 queue.put(putMessage, pmo); 66 queue.close(); 67 } catch (MQException ex) { 68 System.out.println("A WebSphere MQ error occurred : Completion code " 69 + ex.completionCode + " Reason code " + ex.reasonCode); 70 ex.printStackTrace(); 71 } catch (IOException ex) { 72 System.out.println("An error occurred whilst writing to the message buffer: " + ex); 73 } catch (Exception ex) { 74 ex.printStackTrace(); 75 } finally { 76 try { 77 qMgr.disconnect(); 78 } catch (MQException e) { 79 e.printStackTrace(); 80 } 81 } 82 return result; 83 } 84 /** 85 * 从队列中去获取消息,如果队列中没有消息,就会发生异常,不过没有关系,有TRY...CATCH,如果是第三方程序调用方法,如果无返回则说明无消息 86 * 第三方可以将该方法放于一个无限循环的while(true){...}之中,不需要设置等待,因为在该方法内部在没有消息的时候会自动等待。 87 * 88 * @return 89 */ 90 public static String getMessage() { 91 String message = null; 92 try { 93 //设置将要连接的队列属性 94 int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 95 MQMessage retrieve = new MQMessage(); 96 //设置取出消息的属性(默认属性) 97 //设置放置消息选项 98 MQGetMessageOptions gmo = new MQGetMessageOptions(); 99 gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT; 100 //在同步点控制下获取消息 101 gmo.options = gmo.options + MQC.MQGMO_WAIT; 102 //如果在队列上没有消息则等待 103 gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING; 104 //如果队列管理器停顿则失败 105 gmo.waitInterval = 1000; //设置等待的毫秒时间限制 106 /*关闭了就重新打开*/ 107 if (qMgr == null || !qMgr.isConnected()) { 108 qMgr = new MQQueueManager(qmName); 109 } 110 MQQueue queue = qMgr.accessQueue(qName, openOptions); 111 // 从队列中取出消息 112 queue.get(retrieve, gmo); 113 message = retrieve.readUTF(); 114 System.out.println("The message is: " + message); 115 queue.close(); 116 } catch (MQException ex) { 117 System.out.println("A WebSphere MQ error occurred : Completion code " 118 + ex.completionCode + " Reason code " + ex.reasonCode); 119 } catch (IOException ex) { 120 System.out.println("An error occurred whilst writing to the message buffer: " + ex); 121 } catch (Exception ex) { 122 ex.printStackTrace(); 123 } finally { 124 try { 125 qMgr.disconnect(); 126 } catch (MQException e) { 127 e.printStackTrace(); 128 } 129 } 130 return message; 131 } 132 public static void main(String args[]) { 133 /*下面两个方法可同时使用,也可以单独使用*/ 134 sendMessage("Hi Java MQ!"); 135 getMessage(); 136 } 137}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )