最近開始在項目中使用easynetq,大概瞭解了下api,在網上看了下示例,結果沒有一個運行成功的,一個最簡單的發佈訂閱都沒有成功。我是直接運行起來別人的示例,不該該啊,後來一直分析一直分析,最後發現:消息沒有序列化!這仍是其一,第二點,應該要先起來消息接收端,再起來消息發佈端。一開始就是簡單的:html
static void Main() { using( var bus = RabbitHutch.CreateBus( "host=localhost" ) ) { bus.Subscribe<TextMessage>( "test", HandleTextMessage ); Console.WriteLine( "Listening for messages. Hit <return> to quit." ); Console.ReadLine(); } } static void HandleTextMessage( TextMessage textMessage ) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine( $"Got message {textMessage.Text}" ); }
private static void Main() { using (var bus = RabbitHutch.CreateBus("host=localhost")) { var input = ""; Console.WriteLine("Enter a message. 'Quit' to quit."); while ((input = Console.ReadLine())?.ToUpper() != "QUIT") { bus.Publish(new TextMessage { Text = input }); } } }
public class TextMessage { public string Text { get; set; } }
結果,黑窗口仍是黑窗口,爲何沒有消息訂閱的輸出?其實就是由於咱們的消息沒有序列化。在發佈端增長:git
bus.Publish<string>(JsonConvert.SerializeObject(new TextMessage{ Text = "Hello World" }));
在接口端增長:github
var myMessage = (TextMessage)JsonConvert.DeserializeObject<TextMessage>(obj);
這樣就能夠了。api
其實咱們能夠使用高級API中的message類來包裝咱們的消息,這樣的話,能夠不用在發佈端序列化消息,可是依舊須要在接收端反序列化消息。具體請參考:
EasyNetQ-高級APIui
https://github.com/aspnet/PlatformAbstractions/blob/release/1.1/src/Microsoft.Extensions.PlatformAbstractions/PlatformServices.csurl