我正在尝试将Azure Service Bus与.NET Core一起使用。显然此刻,这种情绪很糟糕。我尝试了以下路线:
然后,我转向REST。
https://azure.microsoft.com/en-gb/documentation/articles/service-bus-brokered-tutorial-rest/是一个好的开始(虽然没有对.NET Core的RestSharp支持,并且出于某种原因,官方SDK似乎不包括REST客户端 - 没有Swagger def,没有AutoRest客户端等) 。虽然这个蹩脚的示例将字符串连接到XML而不进行编码,但它涵盖了一小部分功能。
所以我决定寻找REST文档。有两个部分,“经典”REST和REST。普通的新REST不支持实际发送和接收消息(......嗯?)。我厌恶使用标有“经典”的旧技术,除非我能理解它是什么 - 当然,文档在这里没有帮助。它还使用XML和ATOM而不是JSON。我不明白为什么。
奖励:链接到REST API文档中的示例,例如来自https://msdn.microsoft.com/en-US/library/azure/hh780786.aspx,不再存在。
是否有任何可行的方法,任何人都可以使用Azure Service Bus和.NET Core读取/写入主题/订阅消息?
答案 0 :(得分:3)
仍然there's not sufficient support for OnMessage
implementation我认为最重要的是ServiceBus,ServiceNet的.Net核心版本几天前推出了。
答案 1 :(得分:2)
.Net Core中对Azure Service Bus的支持越来越好。有一个专门的nuget包: Microsoft.Azure.ServiceBus 。至于现在(2018年3月),它支持您可能需要的大多数场景,尽管存在一些差距,例如:
对于接收消息的 OnMessage 支持,有一种新方法: RegisterMessageHandler ,它可以做同样的事情。
以下是如何使用它的代码示例:
public class MessageReceiver
{
private const string ServiceBusConnectionString = "Endpoint=sb://bialecki.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[privateKey]";
public void Receive()
{
var subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, "productRatingUpdates", "sampleSubscription");
try
{
subscriptionClient.RegisterMessageHandler(
async (message, token) =>
{
var messageJson = Encoding.UTF8.GetString(message.Body);
var updateMessage = JsonConvert.DeserializeObject<ProductRatingUpdateMessage>(messageJson);
Console.WriteLine($"Received message with productId: {updateMessage.ProductId}");
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
},
new MessageHandlerOptions(async args => Console.WriteLine(args.Exception))
{ MaxConcurrentCalls = 1, AutoComplete = false });
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
}
}
有关完整信息,请查看我的博文:
在.Net Core中发送消息:here
在.Net Core中接收消息:http://www.michalbialecki.com/2017/12/21/sending-a-azure-service-bus-message-in-asp-net-core/
答案 2 :(得分:1)
不幸的是,截至撰写本文时,您使用服务总线的唯一选择是,如果您想使用Azure存储,可以自行推送,也可以使用其他第三方库,例如Hangfire,它具有一种类型-queue以Sql Server存储的形式。