windows、linux下java连接本地MQ队列实现输入
来源:互联网 发布:php 获取get和post 编辑:程序博客网 时间:2024/06/04 19:55
自从前几天写了一篇websphere MQ安装以后,今天打算再写一篇java连接本地MQ队列实现put,get操作,希望可以给大家带来一些帮助,同时也给自己做一个总结。
先windows,后linux。
八戒(本人)下载的版本是WS_MQ_V7.5.0.2_TRIAL_FOR_WINDOWS_ML.zip,
下面附上官网下载链接:https://www.ibm.com/developerworks/cn/downloads/ws/wmq/ (选90天试用期,剩下的版本根据个人意愿下载)
Windows版:
安装好以后的界面如上图:下面就来创建一个MQ管理器
右键队列管理器,新建一个队列管理器,命名为bajie
默认监听器端口是1414,但是我之前已经有一个队列管理器,所以这里要修改为1415
可以看到,显示bajie证明,队列管理器创建成功。
下面来创建一个队列。
展开bajie,右键队列,新建本地队列(这里要注意,队列名称不管你用大写还是小写,MQ都会默认大写,所以一会要连接的时候只能用大写,小写会报错:找不到远程队列,八戒在linux上遇到过无数次以后才发现...)
提示:创建队列成功!
下来新建服务器连接通道
右键通道,新建,服务器连接通道
最后再确认一下编码字符集和端口号
右键bajie,点属性
下面来创建项目,本地创建一个Java项目,八戒jar包的默认路径是C:\Program Files (x86)\IBM\WebSphere MQ_2\java\lib,仅供参考,
核心jar包,我忘记了(你们可以百度一下),我全部放进工程中。
java代码
package cn.shayulajiao.MQ;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 JulyTest {static MQQueueManager qMgr;static int CCSID = 1381;//static String queueString = "LOCALQUEUE";static String queueString = "BAJIE_QUEUE";public static void connect() throws MQException {MQEnvironment.hostname = "127.0.0.1";MQEnvironment.channel = "bajie_conn";MQEnvironment.port = 1415;MQEnvironment.CCSID = CCSID;//MQ中拥有权限的用户名MQEnvironment.userID = "MUSR_MQADMIN";//用户名对应的密码MQEnvironment.password = "123456";qMgr = new MQQueueManager("bajie");}public static void sendMsg(String msgStr) {int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE; MQQueue queue = null; try { // 建立Q1通道的连接 queue = qMgr.accessQueue(queueString, openOptions, null, null, null); MQMessage msg = new MQMessage();// 要写入队列的消息 msg.format = MQC.MQFMT_STRING; msg.characterSet = CCSID; msg.encoding = CCSID; // msg.writeObject(msgStr); //将消息写入消息对象中 msg.writeString(msgStr); MQPutMessageOptions pmo = new MQPutMessageOptions(); msg.expiry = -1; // 设置消息用不过期 queue.put(msg, pmo);// 将消息放入队列 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (queue != null) { try { queue.close(); } catch (MQException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}public static void receiveMsg() { int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE; MQQueue queue = null; try { queue = qMgr.accessQueue(queueString, openOptions, null, null, null); System.out.println("该队列当前的深度为:" + queue.getCurrentDepth()); System.out.println("==========================="); int depth = queue.getCurrentDepth(); // 将队列的里的消息读出来 while (depth-- > 0) { MQMessage msg = new MQMessage();// 要读的队列的消息 MQGetMessageOptions gmo = new MQGetMessageOptions(); queue.get(msg, gmo); System.out.println("消息的大小为:" + msg.getDataLength()); System.out.println("消息的内容:\n" + msg.readStringOfByteLength(msg.getDataLength())); System.out.println("---------------------------"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (queue != null) { try { queue.close(); } catch (MQException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }public static void main(String[] args) throws MQException {connect();sendMsg("hello world");sendMsg("同是天涯沦落人,相逢何必曾相识");receiveMsg();}}
走到这里基本上也差不多结束了,这里说一下可能会遇到的几个问题
完成代码是 2,原因为 2035
可能错误分析:
通道开启认证,将访问拒绝了解决方案:
关闭认证:进入命令行
>runmqsc bajie //启动队列管理器bajie的MQSC (如果显示未找到该命令,说明你没有在path路径配置,理同jdk)
display qmgr chlauth
1:display qmgr chlauth
AMQ8408:显示队列管理器的细节
QMNAME(bajie)CHLAUTH(ENABLED)
//将认证关闭
alter qmgr chlauth(disabled)
2:alter qmgr chlauth(disabled)
AMQ8005:WebSphere MQ 队列管理器已更改
完成代码是 2,原因为 2035
可能错误分析:应用程序“WebSphere MQ Client for java”没有提供用户标示和密码
解决方案:
需要在代码中加入用户标示和密码
//MQ中拥有权限的用户名
MQEnvironment.userID = "MUSR_MQADMIN";
//用户名对应的密码
MQEnvironment.password = "123456";
使用其他用户的话,需要用户已经存在系统中的mqm用户组中
当这些都已经结束的时候,八戒也应该告一段落,希望你也可以如愿以偿的看到你想要的结果。(linux下一篇文章写,这里写了好多先发出去......)
- windows、linux下java连接本地MQ队列实现输入
- windows、linux下java连接本地MQ队列实现输入(二)
- windows、linux下之IBM MQ两个队列管理器之间的通信(终篇)
- Mq本地队列和远程队列
- Java调用MQ队列
- Java调用MQ队列
- 在服务器上创建MQ队列管理器后,本地无法远程连接的问题
- Linux如何实现MQ开机自动启动队列管理器
- java连接ibm mq
- java连接ibm mq
- Java 连接MQ
- Java连接IBM MQ
- JAVA连接IBM MQ
- Java 连接active mq
- Windows下Qt应用程序可以连接本地MYSQL不能连接linux的问题
- Linux与Windows下实现密码隐藏输入方法
- linux下安装mq
- java远程连接ibm mq实现发送和接受消息
- KMP算法
- 链表二分查找法
- 欢迎使用CSDN-markdown编辑器
- mysql报错:out of range value for column问题
- C/C++ static关键字详解
- windows、linux下java连接本地MQ队列实现输入
- ACM输入与输出
- js模拟栈的操作
- LeetCode
- Linux与堆栈概念
- 用筛法求N以内的素数
- 使用 React 全家桶搭建一个后台管理系统
- 比特币及钱包的基础知识
- 匿名内部类 的参数