簡體   English   中英

如何在VB.NET中使用RabbitMQ?

[英]How to use RabbitMQ in VB.NET?

沒有找到有關如何在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#中,Consumer看起來像:

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

創建消費者沒有問題,但是事件沒有反應

是否有某種解決方法,請手動在VB中使用RabbitMQ,或者我只是缺少一些東西?

問題實際上似乎是如何在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方法中,您將事件發送者和args強制轉換為objectEventArgs 可以將參數BasicDeliverEventArgs為這些類型,因為所有內容都是對象,而BasicDeliverEventArgs繼承自EventArgs 但是在這種情況下,您需要進行更具體的轉換,以便可以訪問所需的屬性。

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

最簡單的事情(如果有的話)只是切換到C#。 這使代碼示例更易於使用。 我堅持了一段時間。 不知道為什么-很快就適應了C#,我很快就開始喜歡它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM