背景:

做XX项目需要把交易的消息推送给YY系统,技术选型MQ

另:选用MQ原因是为了防止YY系统宕机,无法接受收消息

实现

1、安装IBM WebSphere MQ客户端

2、引用amqmdnet.dll(在客户端的安装目录下可以找到)

3、C#代码如下

 /*
* write by:wjf
* date:2015-05-20
* dec:MQ操作客户端
*
*/
using System;
using System.Diagnostics;
using System.IO;
using IBM.WMQ; namespace RsaTest
{
public class IbmMQClient : IDisposable
{
// 定义MQ 服务器的IP 地址;
private string hostname = "182.180.80.241";
//private const string hostname = "182.180.80.243";
//MQ侦听端口号
//private const int port = 54221;
private readonly int port;
// 设置队列打开选项为可存放;
private const int openOptions = MQC.MQOO_OUTPUT; // MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; // 队列管理器;
private readonly MQQueueManager qManager;
//队列名称
private readonly string qName;
// 定义MQ 服务器连接通道的名称;
private readonly string channel;
// 定义队列管理器的名称;
//private string qManagerName; public IbmMQClient(string qManagerName, string channel, string qName, string sPort, string hostname)
{
//this.qManagerName = qManagerName;
this.channel = channel;
this.qName = qName;
this.port = Convert.ToInt32(sPort);
this.hostname = hostname;
InitQueueEnv();
qManager = new MQQueueManager(qManagerName);
} /// <summary>
/// 初始化队列环境
/// </summary>
private void InitQueueEnv()
{
// 初始化MQ 环境变量,以指定MQ 服务器的连接参数;
// 指定MQ 服务器的主机名称;
MQEnvironment.Hostname = hostname;
// 指定MQ 服务器的服务器连接通道的名称;
MQEnvironment.Channel = channel;
// 指定MQ 服务器的侦听器的侦听端口号;
MQEnvironment.Port = port;
//MQEnvironment.UserId = "mqm";
} public void SendMessage(string message)
{
if (qManager == null)
{
throw new Exception("队列管理器未初始化。");
}
// 获得队列的访问句柄;
MQQueue lq = qManager.AccessQueue(qName, openOptions); try
{
// 构造新的消息对象,为发送消息做准备;
MQMessage mo = new MQMessage();
//指定编码(有点小重要哦)
mo.CharacterSet = ;
// 填入消息内容;
//mo.WriteUTF(message);
mo.WriteString(message);
//指定消息的格式
mo.Format = MQC.MQFMT_STRING;
// 构造放入消息选项对象;
MQPutMessageOptions pmo = new MQPutMessageOptions();
// 向已打开队列放入已构造的测试消息;
lq.Put(mo, pmo);
}
finally
{
try
{
// 关闭本地队列;
lq.Close();
}
catch (Exception e)
{
Debug.WriteLine(e);
}
}
} public void SendFile(string filePath)
{
if (qManager == null)
{
throw new Exception("队列管理器未初始化。");
}
// 获得队列的访问句柄;
MQQueue lq = qManager.AccessQueue(qName, openOptions); try
{
// 构造新的消息对象,为发送消息做准备;
MQMessage mo = new MQMessage();
//构建文件信息对象
FileInfo fi = new FileInfo(filePath);
//写入文件大小
mo.WriteInt8(fi.Length);
//写入文件名
mo.WriteUTF(fi.Name);
//写入文件内容
mo.Write(File.ReadAllBytes(filePath));
// 构造放入消息选项对象;
MQPutMessageOptions pmo = new MQPutMessageOptions();
// 向已打开队列放入已构造的测试消息;
lq.Put(mo, pmo);
}
finally
{
try
{
// 关闭本地队列;
lq.Close();
}
catch (Exception e)
{
Debug.WriteLine(e);
}
}
} ~IbmMQClient()
{
Close();
} /// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
/// <filterpriority></filterpriority>
public void Dispose()
{
Close();
} public void Close()
{
if (qManager != null)
{
try
{
// 释放与队列管理器的连接;
qManager.Disconnect();
}
catch (Exception e)
{
Debug.WriteLine(e);
}
}
}
}
}

基于C#的IBM消息队列操作客户端的更多相关文章

  1. .NET Core微服务之基于EasyNetQ使用RabbitMQ消息队列

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.消息队列与RabbitMQ 1.1 消息队列 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  2. Delayer 基于 Redis 的延迟消息队列中间件

    Delayer 基于 Redis 的延迟消息队列中间件,采用 Golang 开发,支持 PHP.Golang 等多种语言客户端. 参考 有赞延迟队列设计 中的部分设计,优化后实现. 项目链接:http ...

  3. linux消息队列操作

    对消息队列的操作无非有以下三种类型: 1. 打开或创建消息队列消息队列的内核持续性要求每一个消息队列都在系统范围内相应唯一的键值,所以,要获得一个消息队列的描写叙述字,仅仅需提供该消息队列的键值就可以 ...

  4. 滴滴出行基于RocketMQ构建企业级消息队列服务的实践

    小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间 ...

  5. [转载] 基于Redis实现分布式消息队列

    转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消 ...

  6. 基于redis的延迟消息队列设计

    需求背景 用户下订单成功之后隔20分钟给用户发送上门服务通知短信 订单完成一个小时之后通知用户对上门服务进行评价 业务执行失败之后隔10分钟重试一次 类似的场景比较多 简单的处理方式就是使用定时任务 ...

  7. 基于redis的延迟消息队列设计(转)

    需求背景 用户下订单成功之后隔20分钟给用户发送上门服务通知短信 订单完成一个小时之后通知用户对上门服务进行评价 业务执行失败之后隔10分钟重试一次 类似的场景比较多 简单的处理方式就是使用定时任务 ...

  8. 基于线程池、消息队列和epoll模型实现并发服务器架构

    引言 并发是什么?企业在进行产品开发过程中为什么需要考虑这个问题?想象一下天猫的双11和京东的618活动,一秒的点击量就有几十万甚至上百万,这么多请求一下子涌入到服务器,服务器需要对这么多的请求逐个进 ...

  9. 基于Docker搭建分布式消息队列Kafka

    本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...

随机推荐

  1. (转载)链表环中的入口点 编程之美 leecode 学习

    http://www.cnblogs.com/hiddenfox/p/3408931.html 说的很细 /** * Definition for singly-linked list. * clas ...

  2. node系列2

    文件操作 NodeJS能够操作文件.小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件.换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具,本章将介绍与之 ...

  3. 【Java基础】Java类及成员和修饰符的关系

    修饰符的分类 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类的修饰符 权限修饰符:默认修饰符,public ...

  4. HW3.13

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. HW2.17

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  6. HW1.4

    public class Solution { public static void main(String[] args) { System.out.println("a a^2 a^3& ...

  7. Java和.NET的GZIP压缩功能对比

    本文主要比较了Java和.NET提供的GZIP压缩功能. 介绍 在本文中,我们将讨论Java和.NET提供的GZIP压缩功能,并且用实例来说明哪个压缩方法更佳. 在Java中,我们有提供GZIP压缩的 ...

  8. 坑爹的IE quirk模式【转】

    调试一个页面,ie下面页面css样式很是奇怪,各种失效.找了半天原因不知道怎么回事.最后在调试工具中发现,文档模式为quirk,改成别的(IE 7|8|9)正常. 为什么会自动选择此文档模式呢? 先看 ...

  9. javascript function对象

    <html> <body> <script type="text/javascript"> Function.prototype.get_my_ ...

  10. Oracle Tnsping慢

    http://www.linuxidc.com/Linux/2014-02/96167.htm http://www.askmaclean.com/archives/dns%E8%AE%BE%E7%B ...