public class QueueManger
{
private static string QueuePath = @".\private$\{0}"; /// <summary>
/// 创建MSMQ队列
/// </summary>
/// <param name="queueName">队列路径</param>
/// <param name="transactional">是否事务队列</param>
public static void Createqueue(string queueName, bool transactional = false)
{
try
{
QueuePath = string.Format(QueuePath, queueName);
//判断队列是否存在
if (!MessageQueue.Exists(QueuePath))
{
MessageQueue.Create(QueuePath);
LoggerFile.Write(QueuePath + "已成功创建!");
}
else
{
LoggerFile.Write(QueuePath + "已经存在!");
}
}
catch (MessageQueueException e)
{
LoggerFile.Write(e.Message);
}
}
/// <summary>
/// 删除队列
/// </summary>
/// <param name="queueName"></param>
public static void Deletequeue(string queueName)
{
try
{
QueuePath = string.Format(QueuePath, queueName);
//判断队列是否存在
if (MessageQueue.Exists(QueuePath))
{
MessageQueue.Delete(QueuePath);
LoggerFile.Write(QueuePath + "已删除!");
}
else
{
LoggerFile.Write(QueuePath + "不存在!");
}
}
catch (MessageQueueException e)
{
LoggerFile.Write(e.Message);
}
}
/// <summary>
/// 发送消息
/// </summary>
/// <typeparam name="T">用户数据类型</typeparam>
/// <param name="target">用户数据</param>
/// <param name="queueName">队列名称</param>
/// <param name="tran"></param>
/// <returns></returns>
public static bool SendMessage<T>(T target, string queueName, MessageQueueTransaction tran = null)
{
try
{
QueuePath = string.Format(QueuePath, queueName);
//连接到本地的队列
MessageQueue myQueue = new MessageQueue(QueuePath);
System.Messaging.Message myMessage = new System.Messaging.Message();
myMessage.Body = target;
myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
//发送消息到队列中
if (tran == null)
{
myQueue.Send(myMessage);
}
else
{
myQueue.Send(myMessage, tran);
}
LoggerFile.Write("消息已成功发送到" + queueName + "队列!");
return true;
}
catch (ArgumentException e)
{
LoggerFile.Write(e.Message);
return false;
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <typeparam name="T">用户的数据类型</typeparam>
/// <param name="queueName">消息路径</param>
/// <returns>用户填充在消息当中的数据</returns>
public static T ReceiveMessage<T>(string queueName, MessageQueueTransaction tran = null)
{
QueuePath = string.Format(QueuePath, queueName);
//连接到本地队列
MessageQueue myQueue = new MessageQueue(QueuePath);
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
try
{
//从队列中接收消息
System.Messaging.Message myMessage = tran == null ? myQueue.Receive() : myQueue.Receive(tran);
return (T)myMessage.Body; //获取消息的内容
}
catch (MessageQueueException e)
{
LoggerFile.Write(e.Message);
}
catch (InvalidCastException e)
{
LoggerFile.Write(e.Message);
}
return default(T);
}
/// <summary>
/// 采用Peek方法接收消息
/// </summary>
/// <typeparam name="T">用户数据类型</typeparam>
/// <param name="queueName">队列路径</param>
/// <returns>用户数据</returns>
public static T ReceiveMessageByPeek<T>(string queueName)
{
QueuePath = string.Format(QueuePath, queueName);
//连接到本地队列
MessageQueue myQueue = new MessageQueue(QueuePath);
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
try
{
//从队列中接收消息
System.Messaging.Message myMessage = myQueue.Peek();
return (T)myMessage.Body; //获取消息的内容
}
catch (MessageQueueException e)
{
LoggerFile.Write(e.Message);
}
catch (InvalidCastException e)
{
LoggerFile.Write(e.Message);
}
return default(T);
}
/// <summary>
/// 获取队列中的所有消息
/// </summary>
/// <typeparam name="T">用户数据类型</typeparam>
/// <param name="queueName">队列路径</param>
/// <returns>用户数据集合</returns>
public static List<T> GetAllMessage<T>(string queueName)
{
QueuePath = string.Format(QueuePath, queueName);
MessageQueue myQueue = new MessageQueue(QueuePath);
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
try
{
Message[] msgArr = myQueue.GetAllMessages();
List<T> list = new List<T>();
msgArr.ToList().ForEach((o) =>
{
list.Add((T)o.Body);
});
return list;
}
catch (Exception e)
{
LoggerFile.Write(e.Message);
}
return null;
}
}

  

MQ单一消息完整流程的更多相关文章

  1. Objective-C RunTime 学习笔记 之 消息转发流程

    1) 当向某个对象发送消息时,先从cache(cache_t)中查找方法对象(method_t),如果找到则进行回调:否则通过查找对象的类(元类)定义中方法列表,一直追溯到NSObject, 如果找到 ...

  2. 架构设计:系统间通信(20)——MQ:消息协议(下)

    (接上文<架构设计:系统间通信(19)--MQ:消息协议(上)>) 上篇文章中我们重点讨论了"协议"的重要性.并为各位读者介绍了Stomp协议和XMPP协议. 这两种协 ...

  3. RocketMQ之九:RocketMQ消息发送流程解读

    在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...

  4. springboot整合mq接收消息队列

    继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...

  5. Grunt搭建自动化web前端开发环境--完整流程

    Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...

  6. MQ(队列消息的入门)

    消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下拓展进程间的通信,对于消息中间件,常见的角色大致也 ...

  7. 与MQ通讯的完整JAVA程序

    该程序实现了发送消息与读取消息的功能,见其中的 send***与get***方法.这只适合于测试,因为环境中的程序还需要对此有稍微的更改,在真实的环境中肯定是在while(true){...} 的无限 ...

  8. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程

    我们在之前的文章中中已经讲到了正确部署运行cas server 和 在cas client中配置. 在此基础上 我们去掉了https的验证,启用了http访问的模式. 单点登录(七)-----实战-- ...

  9. 【转】Windows消息投递流程:WM_COMMAND消息流程

    原文网址:http://blog.csdn.net/hyhnoproblem/article/details/6182585 该示例通过研究基本的单文档程序的“文件”--“打开”命令,分析WM_COM ...

随机推荐

  1. [leetcode 8] String to Integer

    1 题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ...

  2. spark-mllib 密集向量和稀疏向量

    spark-mllib 密集向量和稀疏向量 MLlib支持局部向量和矩阵存储在单台服务器,也支持存储于一个或者多个rdd的分布式矩阵 . 局部向量和局部矩阵是用作公共接口的最简单的数据模型. 基本的线 ...

  3. 知物由学 | AI在Facebook清理有害内容上扮演了什么角色?

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  4. ADB 命令介绍

    Android adb shell am 命令介绍 am这个指令是 activity manager的缩写.这个命令可以启动Activity.打开或关闭进程.发送广播等操作. am命令格式如下 adb ...

  5. es6新增Math方法

    Math.trunc()  用于去除一个数的小数部分,只返回整数部分 Math.trunc(4.1) // 4 Math.trunc(4.9) // 4 Math.trunc(-4.1) // -4 ...

  6. 杀掉所有 skynet 进程

    ps aux | grep skynet | awk '/config/{print $2}' | xargs kill

  7. Java知识锦囊

    最近突然想回顾一下之前的文章,回顾复习一下,正好把觉得还不错的文章收录到这里,方便查阅 Java 2018-04-02 Java计数器之CountDownLatch.CyclicBarrier.Sem ...

  8. 自己动手python打造渗透工具集

    难易程度:★★★阅读点:python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈 ...

  9. POJ 2887

    #include <iostream> #include <string> #define MAXN 2000 using namespace std; struct node ...

  10. Oracle数据库中NARCHAR转换成NUMBER类型

    1.修改后的代码: public void addDirectorActorKeyword(long idStart, long idEnd) { SeriesMgr seriesMgr = new ...