C# 连接 IBM MQ
安装 IBM WebSphere MQ:http://www-01.ibm.com/software/integration/wmq/explorer/downloads/
正确安装要注意几个地方,集群,通道发送方和通道接收方。
要想正确发送消息,必须具备以下条件:
1、传输队列。(本地队列,用法选传输)
2、消息通道(注意填写链接名称是对方IP,传输队列都填上)
3、远程队列(注意填写远程队列和远程队列管理器名称)
然后往远程队列里面填写数据,就会发送到远程的队列了!!
用C#连接IBMMQ需要引用以下几个DLL,该DLL在IBMMQ安装目录bin文件夹下!amqmdnet.dll,imqc23vn.dll,mqic32.dll,amqmdnet.dll
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using IBM.WMQ.PCF;
using IBM.WMQ; namespace test
{ internal class IBMMQClass
{ public void CreateQueueManage(string qmName)
{ throw new Exception("不会创建!"); } /// <summary> /// 创建本地队列 /// </summary> /// <param name="qmName">队列管理器名称</param> /// <param name="queueName">本地队列名称</param> public void CreateQueue(string qmName, string queueName)
{ PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_Q); request.AddParameter(MQC.MQCA_Q_NAME, queueName); request.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_LOCAL); PCFMessage[] response = agent.Send(request); agent.Disconnect(); } /// <summary> /// 创建远程队列 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="queueName">队列名称</param> /// <param name="ycqmName">远程队列管理器名称</param> /// <param name="ycqueueName">远程队列名称</param> /// <param name="csqueueName">传输队列名称</param> public void CreateYuanchengQueue(string qmName, string queueName, string ycqmName, string ycqueueName, string csqueueName)
{ PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_Q); request.AddParameter(MQC.MQCA_Q_NAME, queueName); request.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_REMOTE); request.AddParameter(MQC.MQCA_REMOTE_Q_MGR_NAME, ycqmName); request.AddParameter(MQC.MQCA_REMOTE_Q_NAME, ycqueueName); request.AddParameter(MQC.MQCA_XMIT_Q_NAME, csqueueName); PCFMessage[] response = agent.Send(request); agent.Disconnect(); } /// <summary> /// 创建通道 /// </summary> /// <param name="isSend">True为发送方,false为接收方</param> public void CreateChannel(bool isSend)
{ PCFMessageAgent agent = new PCFMessageAgent("QM_zhang"); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_CHANNEL); request.AddParameter(CMQCFC.MQCACH_CHANNEL_NAME, "mama"); if (!isSend)
{ request.AddParameter(CMQCFC.MQIACH_CHANNEL_TYPE, MQC.MQCHT_RECEIVER); } else
{ request.AddParameter(CMQCFC.MQIACH_CHANNEL_TYPE, MQC.MQCHT_SENDER); request.AddParameter(CMQCFC.MQCACH_CONNECTION_NAME, "192.168.3.232"); request.AddParameter(CMQCFC.MQCACH_XMIT_Q_NAME, "bb"); } PCFMessage[] response = agent.Send(request); agent.Disconnect(); } /// <summary> /// 删除队列 /// </summary> /// <param name="qmName">队列管理器名称</param> /// <param name="queueName">队列名称</param> public void DeleteQueue(string qmName, string queueName)
{ PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_DELETE_Q); request.AddParameter(MQC.MQCA_Q_NAME, queueName); PCFMessage[] response = agent.Send(request); agent.Disconnect(); } /// <summary> /// 发送消息 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="queueName">队列名称</param> /// <param name="body">消息内容</param> public void PutMessage(string qmName, string queueName, string body)
{ MQQueueManager qMgr = new MQQueueManager(qmName); MQQueue queue = qMgr.AccessQueue(queueName, MQC.MQOO_OUTPUT); try
{ MQMessage message = new MQMessage(); message.WriteString(body); message.Format = MQC.MQFMT_STRING; queue.Put(message); } catch { } finally
{ queue.Close(); } } /// <summary> /// 获取消息 /// </summary> /// <param name="qmName">队列管理器名称</param> /// <param name="queueName">队列名称</param> /// <returns>消息内容</returns> public string GetMessage(string qmName, string queueName)
{ MQQueueManager qMgr = new MQQueueManager(qmName); MQQueue queue = qMgr.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING); try
{ MQMessage message = new MQMessage(); queue.Get(message); return message.ReadString(message.MessageLength); } catch { } finally
{ queue.Close(); } } /// <summary> /// 获取消息 /// </summary> /// <param name="qmName">队列管理器名称</param> /// <param name="queueName">队列名称</param> /// <param name="timeInterval">等待时间(毫秒)</param> /// <param name="qMgr">队列管理器实体类</param> /// <returns>消息内容</returns> public string GetMessage(string qmName, string queueName, int timeInterval, out MQQueueManager qMgr)
{ MQQueueManager qMgr = new MQQueueManager(qmName); MQQueue queue = qMgr.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING); MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.Options = MQC.MQGMO_WAIT; gmo.WaitInterval = timeInterval; gmo.MatchOptions = MQC.MQMO_NONE; MQMessage message = new MQMessage(); queue.Get(message, gmo); return message.ReadString(message.MessageLength); } } }
C# 连接 IBM MQ的更多相关文章
- 连接IBM MQ原因码报2035的错误解决办法
我们的系统使用了ibm mq,用户用来向国家局上报文件和接收文件,前几天用户说上报一直不成功.由于 开发这块程序的人已经辞职了,我觉定在我的机器部署一套,研究一下.我的思路: 在我的机器上安装mq,建 ...
- IBM MQ相关 ---- 系列文章
原 IBM websphere MQ远程队列的简单配置 转 MQ7.5以后的权限问题解决 原 MQ--API总结 转 连接IBM MQ原因码报2035的错误解决办法 原 Java连接MQ的实例 转 通 ...
- IBM MQ 2035 或 2013认证错误的解决方法
第一种方法: ALTER CHL(SYSTEM.BKR.CONFIG) CHLTYPE(SVRCONN) ALTER CHL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN ...
- IBM MQ 使用指南
一.MQ基本操作 MQ中有几个很重要的组件:队列管理器(QueueManager).队列(Queue)和通道(Channel).其基本的操作方法如下: 1)创建队列管理器 crtmqm –q QMg ...
- (转)IBM mq基本使用
一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...
- IBM MQ 集成CXF 发送JMS 消息
0.POM依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...
- 用IBM MQ中间件开发碰到的MQRC_NOT_AUTHORIZED(2035)问题
我在一台工作站上面部署了MQ服务器,在MQ服务器中我建立了队列管理器MQ_TEST,在该队列管理器中我建立了一个本地队列MQ_Q以及一个服务器连接通道MQ_C,MQ_C中的MCA用户标识默认为空.同时 ...
- 使用Loadrunner对IBM MQ进行性能测试
一.概述 使用Loadrunner对IBM MQ进行性能测试,需要用到java vuser以及java编码知识.此次先介绍什么是IBM MQ,然后java vuser的使用与配置细节, ...
- IBM MQ + WebSphere + Spring JMS配置方法
IBM MQ + WebSphere + Spring JMS配置方法 首先要在WAS里面配置IBM MQ作为JMS消息的提供者,在WAS管理控制台: Resources->JMS Provi ...
随机推荐
- C#接口的三种实现方式
转自原文C#接口的三种实现方式 public interface MyInterface { /// 下面三个方法的签名都是 /// .method public hidebysig newslot ...
- python学习——练习题(7)
""" 题目:将一个列表的数据复制到另一个列表中. """ import copy def validate(a, b): "&q ...
- 基本SQL命令 (1.SQL命令使用规则/2.库管理/3.表管理/4.表记录管理/5.更改库,库的默认字符集/6.连接数据库的过程/7.数据类型)
1.SQL命令的使用规则 1.每条命令必须以 ; 结尾 2.SQL命令不区分字母大小写 3.使用 \c 终止SQL命令的执行 2.库的管理 1.库的基本操作 ...
- C++Primer笔记-----day02
====================================================================day02=========================== ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 4—反向传播神经网络
课程笔记 Coursera—Andrew Ng机器学习—课程笔记 Lecture 9_Neural Networks learning 作业说明 Exercise 4,Week 5,实现反向传播 ba ...
- 前端开发之HTML篇一
主要内容: 一.HTML简介 二.HTML标签 三.HTML文档结构和注释 四.head标签及相关内容 五.body标签及相关内容 1️⃣ HTM ...
- web前端整套面试题(一)--js相关
一.单选 1.以下哪条语句会产生运行:(A) A.var obj = ( ); B.var obj = [ ]; C.var obj = { }; D.var obj = / /; B代表数组,C代表 ...
- HttpServletResponse返回页面弹窗
下载方法: @RequestMapping(value = "/download.htm") public void downLoadFile(String id,HttpServ ...
- C++ const引用
(1) 在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用. 1 int ival ...
- 【sdut2878】Circle
题目链接http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2878.html 题意 n个结点编号为0 ...