使用SQL Server CLR调用rabbitmq

问题描述 投票:0回答:2

我已经实现了这篇文章来在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 行

这是我的兔子配置

sql-server rabbitmq .net-assembly sqlclr
2个回答
1
投票

首先,非常感谢@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;


0
投票

我们这里有一个要求。每当插入、更新或删除表中的某些行时,我们需要将消息发送到消息代理以进一步处理生成的事件。目前我们正在使用触发器和 SQL Server Service Broker 来实现此目的。但我们希望使用 RabbitMQ 来实现可扩展性和更广泛的覆盖范围。是否有第三方解决方案组件可以满足我们的要求?如果第三方组件不可用,我们准备好自行实施。

© www.soinside.com 2019 - 2024. All rights reserved.