Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)
[Github]:https://github.com/iccb1013/Sheng.RabbitMQ.CommandExecuter
Sheng.RabbitMQ.CommandExecuter 是使用 .Net 对 RabbitMQ 的一个简单封装。
它通过XML配置文件定义Exchange及队列等信息,根据此配置文件自动声明及初始化相关队列信息,方便 .Net 开发人员使用 RabbitMQ。
并实现了一个基于 MQ 的命令执行器,将 MQ 消息抽象化为命令,发布端和订阅端通过命令进行交互。默认实现了两个命令:
1)HTTP请求转发,将收到的MQ消息的指定内容转发到指定URL上;
2)数据库同步,通过预先定义的配置文件,指明不同数据库和表之间的关联关系,发送端向 MQ 中发布数据库同步命令后,订阅方(可作为 windows 服务部署,已在工程中实现)负责解析并执行数据库同步工作。
你可以直接使用基本的 RabbitMQ 封装,也可以在此命令模式的基础上实现你自己的命令。
aaarticlea/png;base64,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" alt="" />
Sheng.RabbitMQ.CommandExecuter.Contract:命令模式中的命令契约,命令的发布方和接收方通过此契约类库共享已知类型。
Sheng.RabbitMQ.CommandExecuter.Core:命令模式的核心实现,命令的解释和执行在此实现,并默认实现了两个命令。
Sheng.RabbitMQ.CommandExecuter.RabbitMQ:RabbitMQ 的简单封装,通过XML配置文件初始化 RabbitMQ,可单独使用此工程方便在 .Net 工程中使用 RabbitMQ。
Sheng.RabbitMQ.CommandExecuter.Service:Windows 服务,可做为命令模式中的接收端。
Sheng.RabbitMQ.CommandExecuter.WindowsForm:没有实际功能,方便开发阶段调试程序。
RabbitMQConfig.xml 用于配置 RabbitMQ 信关信息:
<?xml version="1.0" encoding="utf-8" ?>
<rabbitMQ>
<connectionFactory hostName="192.168.100.100" userName="user" password="1234"></connectionFactory>
<exchangeList>
<exchange name="exchangeName_A" type="direct">
<queueList>
<queue name="queue_test_A" durable="true" exclusive="false" autoDelete="false" routingKey="routingKey_A" type="send"></queue>
<queue name="queue_test_B" durable="true" exclusive="false" autoDelete="false" routingKey="routingKey_B" type="receive"></queue>
</queueList>
</exchange>
</exchangeList>
</rabbitMQ>
相关属性与 RabbitMQ 名称意义皆相同,只是注意一点,queue 节点中的 type 有 send 和 receive 两种,send 表示此队列只用于发送消息,receive 表示此队列只用于接收消息。RabbitMQService 不会订阅 type 为 send 的队列的消息。
代码简要说明:
声明核心类:RabbitMQService ,然后通过此类订阅消息,发送消息。
RabbitMQService _rabbitMQService = RabbitMQService.Instance;
通过 Subscribe 方法订阅消息:
private void btnStartService_Click(object sender, EventArgs e)
{
_rabbitMQService.Subscribe("routingKey_B", RabbitMQCallback); _rabbitMQService.Start(); MessageBox.Show("RabbitMQService 已启动。");
} private void RabbitMQCallback(ulong deliveryTag, string routingKey, string body)
{
_rabbitMQService.Ack(deliveryTag, false); Debug.WriteLine(routingKey + Environment.NewLine + body); MessageBox.Show(routingKey + Environment.NewLine + body);
}
_rabbitMQService.Start() 用于启动 RabbitMQ 的监听。
通过 Send 方法发送消息:
_rabbitMQService.Send("exchangeName_A", "routingKey_B", "");
有关命令模式的实现说明:
在契约类库中,所有的命令均继承自 Command 类,并提供一个 CommandType 属性
public abstract class Command
{
public string CommandType
{
get;
protected set;
}
}
简单的 URL 转发命令的定义如下:
public class DatabaseSyncForwardCommand: Command
{
public const string CommandTypeName = "DatabaseSyncForwardCommand"; public DatabaseSyncForwardCommand()
{
base.CommandType = CommandTypeName;
} public string Url
{
get;set;
} public string CommandContent
{
get;set;
}
}
命令的解析和执行在 Sheng.RabbitMQ.CommandExecuter.Core 中
aaarticlea/png;base64,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" alt="" />
CommandExecuterService 用于向调用者提供命令执行服务的整体封装,通过它启动命令的监听和执行。
CommandReceiver 目录下是命令的接收和执行程序,每个命令都有一个对应的 *Receiver 类,这些类通过 CommandReceiverFactory 这个工厂类统一实例化和调用。
有关数据库同步命令的说明
数据库同步命令可以实现简单的,多个数据库之间的表数据同步。可以定义多个消费者,并为每个消费者定义多个数据提供者,并定义它们之间的表结构对应关系。在文件 DatabaseSyncConfig.xml 中定义:
<?xml version="1.0" encoding="utf-8" ?>
<databaseSync>
<connectionList>
<connection name="connection1" connectionString=""/>
<connection name="connection2" connectionString=""/>
</connectionList>
<consumerList>
<consumer name="crm" connection="connection1">
<producerList>
<producer name="erp" routingKey="routingKey_A" connection="connection2">
<tableDefinition>
<table name="Customers" primaryKey="Id" consumerTable="Customers" consumerTablePrimaryKey="Id">
<Field name="Id" consumerField="Id" ></Field>
<Field name="CustomerName" consumerField="CustomerName"></Field>
<Field name="NopUserName" consumerField="NopUserName"></Field>
</table>
</tableDefinition>
</producer>
</producerList>
</consumer>
</consumerList>
</databaseSync>
connectionList 节点用于定义数据库连接,可以定义多个不同的数据库连接,并在下面的配置环节中引用。
consumerList 用于配置消费者,consumer 下的 producer 表示针对这一消费者的数据提供者。
tableDefinition 用于定义消费者和数据提供者之间的表结构对应关系。
相关程序在收到数据库同步命令时,通过数据提供者定义中的 routingKey 来判断数据同步命令来自哪个数据提供者。
对于数据的提供者,通过类似如下代码,向 MQ 中发送数据同步命令:
DatabaseSyncCommand cmd = new DatabaseSyncCommand(); DatabaseSyncItem item1 = new DatabaseSyncItem()
{
Action = DatabaseSyncAction.Add,
Table = "Customers",
PrimaryKeyValue = "062B54F5-69AA-A108-09F8-39DB9C2F58C4"
}; cmd.SyncItemList.Add(item1); string json = JsonConvert.SerializeObject(cmd); _rabbitMQService.Send("exchangeName_A", "routingKey_A", json);
以上。
QQ: 279060597 @南京
引用请注明原文出处: http://sheng.city/post/sheng-rabbitmq-commandexecuter
Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)的更多相关文章
- Github 开源:升讯威 Winform 开源控件库( Sheng.Winform.Controls)
Github 地址:https://github.com/iccb1013/Sheng.Winform.Controls 本控件库中的代码大约写于10年前(2007年左右),难免有不成熟与欠考虑之处, ...
- 消息中间件——RabbitMQ(四)命令行与管控台的基本操作!
前言 在前面的文章中我们介绍过RabbitMQ的搭建:RabbitMQ的安装过以及各大主流消息中间件的对比:,本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作. 1. 命令行 ...
- Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)【2.源代码简要说明】
GitHub:https://github.com/iccb1013/Sheng.Winform.IDE 在上一篇文章中,简要的介绍了 Sheng.Winform.IDE 的基本功能和要实现的目标: ...
- rabbitmq常见运维命令和问题总结
常见运维命令作用: yum安装erlang的环境配置: ERLANG_HOME=/usr/lib64/erlang export PATH=$PATH:$ERLANG_HOME/bin 常见rabbi ...
- 关于RabbitMQ以及RabbitMQ和Spring的整合
转自:https://www.cnblogs.com/s648667069/p/6401463.html 基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是 ...
- 快速掌握RabbitMQ(一)——RabbitMQ的基本概念、安装和C#驱动
1 RabbitMQ简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,官网地址:http://www.rabbitmq.com.Ra ...
- GitHub开源:升讯威微信营销系统(第三方微信平台)完整源代码
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction 升讯威微信营销系统开发实践系列升讯威微信营销系统开发实践:(1)功能设计与架构设 ...
- 初识RabbitMQ,附RabbitMQ+PHP演示实例
RabbitMQ是一个在AMQP基础上实现的企业级消息系统.何谓消息系统,就是消息队列系统,消息队列是""消费-生产者模型""的一个典型的代表,一端往消息队列中 ...
- 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比(转载)
转载自:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...
随机推荐
- MYSQL数据库-其他
FROM:实验楼 索引: 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索.而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据. 建立索引: $ ...
- 如何使用ArcGIS发布LiDAR 点云
LiDAR--Light Detection And Ranging,即激光探测与测量技术. 下面将介绍如何使用ARCGIS来发布LiDAR的成果点云数据. LiDAR的点云数据一般格式为LAS.在A ...
- 移动web开发经验
1. font-family: "Microsoft YaHei",sans-serif;/*第二个是手机的一个默认的字体 手机没有微软雅黑*/ 2.主流手机浏览器内核都为webk ...
- Linux环境下的IDE,极大提升编程效率
"一个真正的程序员是不用IDE(译者注:集成开发环境)的,他们都是用带着某某插件的文本编辑器来写代码."我们总能在某些地方听到此类观点.然 而,尽管越来越多的人同意这样的观点,但是 ...
- 老李推荐:第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化
老李推荐:第8章1节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行环境初始化 首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目 ...
- 老李推荐:第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类
老李推荐:第6章3节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令翻译类 每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行 ...
- Android自定义View之音频条形图
2016-04-12 17:52 76人阅读 评论(2) 收藏 举报 分类: Android(26) 版权声明:本文为博主原创文章,未经博主允许不得转载. 新建项目,新建MusicRectangl ...
- 为Jquery EasyUI 组件加上“清除”功能
1.背景 在使用 EasyUI 各表单组件时,尤其是使用 ComboBox(下拉列表框).DateBox(日期输入框).DateTimeBox(日期时间输入框)这三个组件时,经常有这样的需求,下拉框或 ...
- phpcms 笔记
首先是要把首页分为三个部分 : 导航部分 .尾部和首页中间部分 用了三个不同的文件 header.html ; index.html; footer.html 在使用phpcms之前 首先 ...
- 如何了解您的微软认证情况和MIC ID