写一段c# winform程序 IBM mq消息队列监听消息的代码
时间: 2024-03-02 18:49:28 浏览: 190
好的,以下是一段 C# WinForm 程序监听 IBM MQ 消息队列的代码:
```csharp
using IBM.WMQ;
using System;
using System.Windows.Forms;
namespace MQListener
{
public partial class Form1 : Form
{
MQQueueManager queueManager = null;
MQQueue queue = null;
MQMessage message = null;
MQGetMessageOptions options = null;
bool isListening = false;
public Form1()
{
InitializeComponent();
}
private void btnConnect_Click(object sender, EventArgs e)
{
try
{
// 设置连接参数
MQEnvironment.Hostname = txtHostname.Text.Trim();
MQEnvironment.Channel = txtChannel.Text.Trim();
MQEnvironment.Port = int.Parse(txtPort.Text.Trim());
MQEnvironment.UserId = txtUsername.Text.Trim();
MQEnvironment.Password = txtPassword.Text.Trim();
// 连接队列管理器
queueManager = new MQQueueManager(txtQueueManager.Text.Trim());
// 打开队列
queue = queueManager.AccessQueue(txtQueue.Text.Trim(), MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
// 初始化消息对象和获取消息的选项
message = new MQMessage();
options = new MQGetMessageOptions();
options.Options |= MQC.MQGMO_NO_SYNCPOINT;
options.Options |= MQC.MQGMO_WAIT;
options.WaitInterval = int.Parse(txtTimeout.Text.Trim()) * 1000;
// 设置监听标志
isListening = true;
// 启动监听线程
bgwListener.RunWorkerAsync();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnDisconnect_Click(object sender, EventArgs e)
{
try
{
// 停止监听
isListening = false;
// 关闭队列
if (queue != null)
{
queue.Close();
queue = null;
}
// 断开队列管理器
if (queueManager != null)
{
queueManager.Disconnect();
queueManager = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bgwListener_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
while (isListening)
{
try
{
// 获取消息
if (queue != null)
{
queue.Get(message, options);
// 处理消息
string body = message.ReadString(message.MessageLength);
// TODO: 处理消息的逻辑
// 清空消息体
message.ClearMessage();
}
}
catch (Exception ex)
{
// 如果队列管理器已经断开,则停止监听
if (ex.Message.Contains("MQRC_Q_MGR_NOT_AVAILABLE") || ex.Message.Contains("MQRC_CONNECTION_BROKEN"))
{
isListening = false;
}
}
}
}
}
}
```
以上代码中,`btnConnect_Click` 方法用于连接 IBM MQ 队列管理器,并启动监听线程;`btnDisconnect_Click` 方法用于停止监听并断开连接;`bgwListener_DoWork` 方法是监听线程的主体,不断从队列中获取消息,然后处理消息。
请注意,以上代码仅供参考,并未进行完整测试,具体实现方式可能需要根据实际情况进行调整。
阅读全文