RabbitMQ in Sql Server CLR

sql CLR 程序集部署步骤比较多且复杂 这里自己记录一下

https://gitee.com/wilsonjw/RabbitMQ-SqlServer

项目主要参考引用下面这些博客

1 项目在nberglund 的开源项目上修改而来 https://github.com/nberglund/RabbitMQ-SqlServer

2 二进制dll 转换工具 https://github.com/SqlQuantumLeap/BinaryFormatter

3 关于sql server 安全程序及讨论及解决方案

部署的基本环境

  • 数据库服务器版本 MSSql Server 2014+
  • MQ .net 客户端版本  RabbitMq.Client 4.0(.net framework 4)

低于2014 版本的sql server 只能支持到 .net framework 3.5 在我的项目中没有去做支持,nberglund 的开源项目中有对应的 程序集

解决方案的结构

  • RabbitMQSqlClr4:最终要部署到clr 中的程序集 处理消息的发送
  • RabbitMQSqlClr.Consumer:是一个控制台mq 消费端 接收消息后处理消息的。
  • 算上 依赖的关联   RabbitMQ.Client    Microsoft.Diagnostics.Tracing.EventSource  实际注册到 CLR 中的程序及一共有3个dll

在安装脚本中已经通过BinaryFormatter工具将编译后的dll 转换成了二进制放在了脚本中了。

部署成功后在sql server 中看见这3个程序集

按数字顺序执行部署脚本 部署时会有涉及sql clr 安全性的问题 这个请参考引用博客中的讨论 这里的处理是关闭安全选项 部署不安全的程序集

部署完 程序集后 我们需要配置 脚本中创建的一些配置表 填入 服务器登陆信息等等配置

tb_RabbitEndpoint 表配置当前数据库连接例如:server=127.0.0.1,25835; database=RabbitMQTest; uid=sa; pwd=pw

tb_RabbitSetting 表配置Mq 服务器相关信息 :

最后 全部配置完成后 可以 调用 pr_SomeProcessingStuff 存储过程 发送mq 消息

如果修改mq和数据库连接配置后 感觉 没有生效的话 可以重启一下 sql server 数据库实例