【问题标题】:Call rabbitmq using SQL Server CLR使用 SQL Server CLR 调用 rabbitmq
【发布时间】:2022-05-17 15:57:16
【问题描述】:

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

System.ApplicationException:
在 RabbitMQSqlClr.RabbitPublisher.Post(字符串交换,字节 [] 消息,字符串主题)
在 RabbitMQSqlClr.RabbitMQSqlServer.pr_clr_PostRabbitMsg(Int32 endPointId, String msgToPost)
在行:0 在行:13

这是我的兔子配置

【问题讨论】:

  • 你的 SQL Server 和 Rabbit 是否在同一个盒子上,如果不是 - 检查防火墙。
  • @NielsBerglund 他们在同一个盒子里
  • @NielsBerglund 应该设置哪个端口?
  • 嗨,Ehsan,端口是 5672。您是否尝试过控制台应用程序中的 CLR 代码? IE。创建一个控制台应用程序并引用您部署到 SQL Server 的 dll,然后从控制台运行,看看会发生什么。
  • @NielsBerglund 非常感谢。不,我没有,我应该参考哪个 dll?

标签: sql-server rabbitmq .net-assembly sqlclr


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多