如何在VB.NET中使用RabbitMQ?

kxxlusnw  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(363)

没有找到一个关于如何在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

创建消费者时没有问题,但对事件没有React
有没有一些工作,手册如何使用rabbitMQ与VB或也许我只是错过了一些东西?

h9a6wy2h

h9a6wy2h1#

实际上,问题似乎是如何在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#,我很快就喜欢上了它。

相关问题