JAVA MQ API方式通信采用Binding MQ Server方式

package com.mqapi;/** * @modified by actorai E-mail:actorai@163.com * @version 创建时间:2010-9-15 * 通过MQ API方式连接MQ;绑定服务器方式 * WebSphere MQ classes for Java的绑定模式与客户连接模式存在下列区别: * 1 忽略了MQEnvironmnet类所提供的大多数参数。 * 2 绑定模式支持MQBEGIN和快速绑定。 * 类说明 */import java.io.IOException; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageOptions; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; public class MessageByMQ_Bind{ //定义队列管理器和队列的名称 private static String qmName; private static String qName; private static MQQueueManager qMgr; static{ //绑定模式只适用于那些运行在作为队列管理器主机的WebSphere MQ 服务器上的程序 //不需要设置一下环境变量 //设置环境: //MQEnvironment中包含控制MQQueueManager对象中的环境的构成的静态变量,MQEnvironment的值的设定会在MQQueueManager的构造函数加载的时候起作用, //因此必须在建立MQQueueManager对象之前设定MQEnvironment中的值. //MQEnvironment.hostname="10.0.4.213"; //MQ服务器的IP地址 //MQEnvironment.channel="CLIENT.QM_APPLE"; //服务器连接的通道 //MQEnvironment.CCSID=1381; //服务器MQ服务使用的编码1381代表GBK、1208代表UTF(Coded Character Set Identifier:CCSID) //MQEnvironment.port=1415; //MQ端口 qmName = "QM_APPLE"; //MQ的队列管理器名称 qName = "01"; //MQ远程队列的名称 try { //定义并初始化队列管理器对象并连接 //MQQueueManager可以被多线程共享,但是从MQ获取信息的时候是同步的,任何时候只有一个线程可以和MQ通信。 qMgr = new MQQueueManager(qmName); } catch (MQException e) { // TODO Auto-generated catch block System.out.println("初使化MQ出错"); e.printStackTrace(); } } /** * 往MQ发送消息 * @param message * @return */ public static int sendMessage(String message){ int result=0; try{ //设置将要连接的队列属性 // Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface //(except for completion code constants and error code constants). //MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default. //MQOO_OUTPUT:Open the queue to put messages. /*目标为远程队列,所有这里不可以用MQOO_INPUT_AS_Q_DEF属性*/ //int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; /*以下选项可适合远程队列与本地队列*/ int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING; //连接队列 //MQQueue provides inquire, set, put and get operations for WebSphere MQ queues. //The inquire and set capabilities are inherited from MQManagedObject. /*关闭了就重新打开*/ if(qMgr==null || !qMgr.isConnected()){ qMgr = new MQQueueManager(qmName); } MQQueue queue = qMgr.accessQueue(qName, openOptions); //定义一个简单的消息 MQMessage putMessage = new MQMessage(); //将数据放入消息缓冲区 putMessage.writeUTF(message); //设置写入消息的属性(默认属性) MQPutMessageOptions pmo = new MQPutMessageOptions(); //将消息写入队列 queue.put(putMessage,pmo); queue.close(); }catch (MQException ex) { System.out.println("A WebSphere MQ error occurred : Completion code " + ex.completionCode + " Reason code " + ex.reasonCode); ex.printStackTrace(); }catch (IOException ex) { System.out.println("An error occurred whilst writing to the message buffer: " + ex); }catch(Exception ex){ ex.printStackTrace(); }finally{ try { qMgr.disconnect(); } catch (MQException e) { e.printStackTrace(); } } return result; } /** * 从队列中去获取消息,如果队列中没有消息,就会发生异常,不过没有关系,有TRY...CATCH,如果是第三方程序调用方法,如果无返回则说明无消息 * 第三方可以将该方法放于一个无限循环的while(true){...}之中,不需要设置等待,因为在该方法内部在没有消息的时候会自动等待。 * @return */ public static String getMessage(){ String message=null; try{ //设置将要连接的队列属性 // Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface //(except for completion code constants and error code constants). //MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default. //MQOO_OUTPUT:Open the queue to put messages. int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; MQMessage retrieve = new MQMessage(); //设置取出消息的属性(默认属性) //Set the put message options.(设置放置消息选项) MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;//Get messages under sync point control(在同步点控制下获取消息) gmo.options = gmo.options + MQC.MQGMO_WAIT; // Wait if no messages on the Queue(如果在队列上没有消息则等待) gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// Fail if Qeue Manager Quiescing(如果队列管理器停顿则失败) gmo.waitInterval = 1000 ; // Sets the time limit for the wait.(设置等待的毫秒时间限制) /*关闭了就重新打开*/ if(qMgr==null || !qMgr.isConnected()){ qMgr = new MQQueueManager(qmName); } MQQueue queue = qMgr.accessQueue(qName, openOptions); // 从队列中取出消息 queue.get(retrieve, gmo); //message = retrieve.readUTF(); //此方法读通过MQ资源管理器放入的消息会IO读写错误,通过MQ资源管理器放入的测试消息就不是UTF这样的格式的,所以会报错 message = retrieve.readLine(); //此方法读xml格式,有网友提到可能会报错 System.out.println("The message is: " + message); queue.close(); }catch (MQException ex) { System.out.println("A WebSphere MQ error occurred : Completion code " + ex.completionCode + " Reason code " + ex.reasonCode); }catch (IOException ex) { //System.out.println("An error occurred whilst writing to the message buffer: " + ex); ex.printStackTrace(); }catch(Exception ex){ ex.printStackTrace(); }finally{ try { qMgr.disconnect(); } catch (MQException e) { e.printStackTrace(); } } return message; } public static void main(String args[]) { /*下面两个方法可同时使用,也可以单独使用*/ sendMessage("this is a test by MQ API Binding model"); //getMessage(); } } JAVA MQ API方式通信采用Binding MQ Server方式的更多相关文章
- JAVA客户端API调用memcached两种方式
1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...
- C++/java之间的Socket通信大小端注意事项
在一个物联往项目中,需要java云平台与一个客户端做socket定制协议的通信:然而在第一次测试时,并没有按照预想的那样完成解析.查找资料以后是因为客户端的数据读取方式为小端模式,而java默认采用大 ...
- api接口对于客户端的身份认证方式以及安全措施
转载 基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsession ...
- 分布式事务(二)Java事务API(JTA)规范
一.引子 既然出现了分布式场景(DTP模型), 大java也及时制定出一套规范来给各大应用服务器.数据库/mq等厂商使用,以方便管理互通--->JTA闪亮登场.JTA(Java Transact ...
- MQ与webservice的区别,MQ的区别
Webservice 和MQ(MessageQueue)都是解决跨平台通信的常用手段,两者有哪些区别呢? 个人认为最本质的区别在于 Webservice近乎实时通信,而MQ却通常是延时通信. 什么意思 ...
- Android使用Java Mail API发送邮件
最近在考虑为已经有的一个应用程序增加一个用户反馈的功能,用户可以通过反馈功能将用户的意见和建议.程序出现的问题以一种更符合用户习惯的方式反馈回来.网上也有一些实现好的反馈程序的服务,包括bug的提交. ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
- Java Attach API
catalog . instrucment与Attach API . BTrace: VM Attach的两种方式 . Sun JVM Attach API 1. instrucment与Attach ...
- 关于 Java Collections API 您不知道的 5 件事--转
第 1 部分 http://www.ibm.com/developerworks/cn/java/j-5things2.html 对于很多 Java 开发人员来说,Java Collections A ...
随机推荐
- C#中产生SQL语句的几种方式
(1)拼接产生SQL语句: string sql = "insert into czyb(yhm,mm,qx) values('" + txtName.Text + "' ...
- 寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase
前情回顾 在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要.这是因为原生的云存储(主要指S3这样的对象存储)既能够容纳大容量的明细数据,又能在性能和成本间取得一 ...
- 走近Java之幕后的String
前几天,有个同事问了我一个表面看起来显而易见的问题,是关于String的,我们一起来看一下(如果有说的不正确的地方,欢迎大家指正). java中,字面量在编译期计算,并且String字面量作为常量,存 ...
- Web前端——JavaScript扩展补充
JS补充 document也是windows的一个子对象 a标签点击事件 要想设置点击a标签,执行某种方法,推荐在a标签的herf属性使用JavaScript伪协议,实现点击之后执行的js方法,而不是 ...
- C语言中的函数与数学上的函数很类似
函数,是C语言编程中一个很重要的概念,重要到个人认为可以与指针并驾齐驱.好多教材.老师.学习资源都会专门挑出一章来讲函数.我今天也来说说函数,只不过我是从数学课上的函数来引申到C语言中的函数. 先来说 ...
- 浅谈MQTT
一.什么是MQTT MQTT的全称是“ Message Queuing Telemetry Transport”,即消息队列遥测传输,是一种基于订阅/发布模式的应用层协议,而http是一种基于rest ...
- AT649 自由研究
这道题有些水... 我们观察到,这是一道彻底离线的题目,连输入也没有,我们可以发现1<=n<=401<=n<=401<=n<=40 于是,我们就可以考虑n=1n=1 ...
- Excel催化剂开源第12波-VSTO开发遍历功能区所有菜单按钮及自定义函数清单
在插件开发过程中,随着功能越来越多,用户找寻功能入口将变得越来越困难,在Excel催化剂 ,将采用遍历所有功能的方式,让用户可以轻松使用简单的查找功能找到想要功能所在位置,查找的范围有:功能按钮的显示 ...
- 踩坑 Spring Cloud Hystrix 线程池队列配置
背景: 有一次在生产环境,突然出现了很多笔还款单被挂起,后来排查原因,发现是内部系统调用时出现了Hystrix调用异常.在开发过程中,因为核心线程数设置的比较大,没有出现这种异常.放到了测试环境,偶尔 ...
- C#程序从Excel表格中读取数据并进行处理
今天做了一个Excel表格数据处理的事情,因为数据量表较大(接近7000条)所以处理起来有点麻烦,于是写了一个程序, 先将程序记下以便将来查找. using System; using System. ...