我已经实现了这篇文章来在SQL Server内部调用rabbitmq:
[https://nielsberglund.com/2017/02/11/rabbitmq---sql-server/][1]
但是当我尝试使用 CLR 发送消息时,出现此错误:
消息 50000,级别 16,状态 1,过程 pr_SomeProcessingStuff,第 43 行
错误:执行用户定义例程或聚合“pr_clr_PostRabbitMsg”期间发生 .NET Framework 错误:System.ApplicationException:尝试将消息发布到 Exchange 时通道池被阻止:amq.topic。
系统.ApplicationException:
在 RabbitMQSqlClr.RabbitPublisher.Post(字符串交换,Byte[] 消息,字符串主题)
在 RabbitMQSqlClr.RabbitMQSqlServer.pr_clr_PostRabbitMsg(Int32 endPointId,字符串 msgToPost)
在第 0 行 在第 13 行
这是我的兔子配置
首先,非常感谢@NielsBerglund 为我们提供了 RabbitMQ-SqlServer。
经过几个小时的努力,我刚刚解决了同样的错误。
我能够使用 Neils 提供的 VS 解决方案中的控制台应用程序在两个不同的服务器(数据库服务器和应用程序服务器)之间发送消息,因此证明防火墙等不会阻止该消息。
但是,在 SQL Management Studio 中执行 SQL CLR 存储过程始终返回通道池阻塞错误。
经过多次修改,我注意到更改 tb_RabbitEndpoint 中的交换名称(使用 pr_UpsertRabbitEndpoint)仍然返回完全相同的错误消息,引用之前的交换名称。
我能够通过重新配置 SQL CLR 解决此问题:
EXEC sp_configure 'CLR 已启用', 0
去
重新配置
去
EXEC sp_configure '启用 CLR', 1
去
重新配置
去
执行 rmq.pr_clr_InitialiseRabbitMq;
我们这里有一个要求。每当插入、更新或删除表中的某些行时,我们需要将消息发送到消息代理以进一步处理生成的事件。目前我们正在使用触发器和 SQL Server Service Broker 来实现此目的。但我们希望使用 RabbitMQ 来实现可扩展性和更广泛的覆盖范围。是否有第三方解决方案组件可以满足我们的要求?如果第三方组件不可用,我们准备好自行实施。