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 ...
随机推荐
- Codeforces 617E:XOR and Favorite Number(莫队算法)
http://codeforces.com/problemset/problem/617/E 题意:给出n个数,q个询问区间,问这个区间里面有多少个区间[i,j]可以使得ai^ai+1^...^aj ...
- tomcat 启动窗口 名称 中文乱码
- async与await详解
async和await只是编译器功能.编译器会用Task类创建代码.如果不适用这两个关键字,也可以用C#4.0和Task类实现同样的功能,只是没有那么方便. 题主在概念上确实混淆的不行,但是确实asy ...
- Python入门基础(2)
如果你是博客园团队,,看到不符合您们要求的地方可否指出来?不要你不符合要求,然后我不符合哪项要求?是要我自己去找么? python条件语句 首先介绍的是if语句,python中的if语句格式如下: i ...
- CentOS 6.5 下安装及使用中文输入法
第一次在本机环境下搭载Linux环境,但搭载后发现在CentOS 6.5只能英文输入,于是试着安装并启用中文输入法,经过一翻折腾,实现了在终端和自带火狐浏览器下支持中文输入法. CentOS下安装中文 ...
- 下载历史版本CentOS
搜索centos 进入主页面向下移动滚动找到 点击后向下移动,选择需要的版本进行tree 选择 OK!
- BFM使用 - 获取平均脸模型的68个特征点坐标
使用版本:2009 数据说明网址:https://faces.dmi.unibas.ch/bfm/index.php?nav=1-1-0&id=details 数据下载网址:https://f ...
- linux svn 中文 https://my.oschina.net/VASKS/blog/659236
https://my.oschina.net/VASKS/blog/659236 设置服务器: export LC_ALL=zh_CN.UTF-8长久之计, echo export LC_ALL=zh ...
- +p解决vim粘贴自动缩进。 数字gg跳到vim指定行。 vim查找到后,enter键修改
+p解决vim粘贴自动缩进. 数字gg跳到vim指定行. vim查找到后,enter键修改
- 简单分析线程获取ReentrantReadWriteLock 读锁的规则
1. 问题 最近有同事问了我一个问题,在Java编程中,当有一条线程要获取ReentrantReadWriteLock的读锁,此时已经有其他线程获得了读锁,AQS队列里也有线程在等待写锁.由于读锁是共 ...