【问题标题】:How to use RabbitMQ in VB.NET?如何在 VB.NET 中使用 RabbitMQ?
【发布时间】:2017-11-21 14:19:14
【问题描述】:

没有找到关于如何在VB中使用RabbitMQ的一件事

可以进行一些扩展,使其看起来像 C#

Dim factory = New ConnectionFactory() : With factory
  .HostName = "localhost"
End With

Using connection = factory.CreateConnection()
  Using channel = connection.CreateModel()

  ...
  ...

  End Using
End Using

而且我已经检查了发送消息或者声明队列没有问题,但是消费者的使用呢?

在 C# 中消费者看起来像:

var consumer = new EventingBasicConsumer(channel);

        consumer.Received += (model, ea) =>
        {
            var body = ea.Body;

            ...
            ...

            channel.BasicAck(ea.DeliveryTag, false, false);
        };

但是这在 VB 中应该是怎样的呢? 已经尝试过这种东西:

Dim consumer As EventingBasicConsumer = New EventingBasicConsumer(channel)
AddHandler consumer.Received, AddressOf ConsumerReceived

Private Sub ConsumerReceived(ByVal sender As Object, ByVal e As EventArgs)
  Dim Test = ""
End Sub

消费者创建没有问题,但对事件没有反应

是否有某种解决方法,手动如何将 RabbitMQ 与 VB 结合使用,或者我可能只是遗漏了什么?

【问题讨论】:

  • 我赞成您的问题并阅读了它。但我唯一的提示是使用在线转换器。
  • 人们对所以有严格的饮食习惯,请不要在你的问题中直接加盐。他们可能有不宽容。相反,您可以询问如何改进您的问题。我认为您的问题没有错,但我不是专家。只有一个低代表路过。
  • 遗憾的是,在线转换器无法理解如何处理converter.Received。我根本不相信以前没有人尝试在 VB 上使用 RabbitMQ :( 一定有什么
  • 在这种情况下,正确的做法是适应并开始使用 c#,这是一种不那么繁琐的编程语言。 :)

标签: c# vb.net rabbitmq


【解决方案1】:

问题似乎是如何在 VB.NET 中将匿名函数指定为事件处理程序。这与为什么没有调用事件处理程序不是同一个问题。

但我认为您正在寻找的可能是这样的:

AddHandler consumer.Received, Sub(consumer as IBasicConsumer, ea as BasicDeliverEventArgs)
                                 Dim body = ea.Body
                                 '...  
                                 channel.BasicAck(ea.DeliveryTag, false, false)
                              End Sub

或者您可以照常做,并将事件处理程序放在单独的方法中。 (我倾向于这样做只是因为它更容易阅读和理解。)

在您的 VB.NET 方法中,您将事件发送者和参数转换为 objectEventArgs。参数可以转换为这些类型,因为一切都是对象并且BasicDeliverEventArgs 继承自EventArgs。但在这种情况下,您需要更具体地进行转换,以便您可以访问所需的属性。

Private Sub ConsumerReceived(ByVal sender As IBasicConsumer, ByVal e As BasicDeliverEventArgs)
  Dim Test = ""
End Sub

最简单的事情(如果可以的话)就是切换到 C#。这使得代码示例更易于使用。我坚持使用 VB.NET 一段时间。不知道为什么 - 很快就适应了 C#,我很快就喜欢上了它。

【讨论】:

  • 哦,谢谢您的回复,例如。甚至没有考虑过这种方式。第一次尝试没有成功,但Console.ReadKey 创造了奇迹。我也认为 C# 更好,但就我的情况而言,遗憾的是,这不是一个选择
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多