我有一个使用Microsoft.Azure.ServiceBus的消息发布者,需要用Azure.Messaging.ServiceBus替换它,因为现在已经不再推荐它了。
以下是代码:
using Microsoft.Azure.ServiceBus;
using Newtonsoft.Json;
using System;
using System.Text;
using System.Threading.Tasks;
namespace gbx.infra.ware.Services
{
public interface IMessagePublisher
{
public Task Publish<T>(T obj);
public Task Publish(string raw);
public Task<long> PublishScheduled<T>(T obj, DateTimeOffset time);
}
public class MessagePublisher : IMessagePublisher
{
private readonly ITopicClient _topicClient;
public MessagePublisher(ITopicClient topicClient)
{
_topicClient = topicClient;
}
public Task Publish<T>(T obj)
{
string objAsText = JsonConvert.SerializeObject(obj);
Message message = new Message(Encoding.UTF8.GetBytes(objAsText));
message.UserProperties["messageType"] = typeof(T).Name;
return _topicClient.SendAsync(message);
}
public Task Publish(string raw)
{
Message message = new Message(Encoding.UTF8.GetBytes(raw));
message.UserProperties["messageType"] = "Raw";
return _topicClient.SendAsync(message);
}
public Task<long> PublishScheduled<T>(T obj, DateTimeOffset time)
{
string objAsText = JsonConvert.SerializeObject(obj);
Message message = new Message(Encoding.UTF8.GetBytes(objAsText));
message.UserProperties["messageType"] = typeof(T).Name;
return _topicClient.ScheduleMessageAsync(message, time);
}
}
}有什么简单的方法我可以改变吗?我找不到这方面的任何信息。
出版商的注册方式如下:
services.AddSingleton<ITopicClient>(x => new TopicClient(Configuration["ServiceBus:ConnectionString"], Configuration["ServiceBus:TopicName"]));
services.AddSingleton<IMessagePublisher, MessagePublisher>();并按需要注入。
我想要做的只是更改消息发布程序中的代码,这样就不需要在使用它的代码中进行更改。
发布于 2022-08-17 07:34:05
如果您只使用迁移指南,您最终将得到
public interface IMessagePublisher
{
public Task Publish<T>(T obj);
public Task Publish(string raw);
public Task<long> PublishScheduled<T>(T obj, DateTimeOffset time);
}
public class MessagePublisher : IMessagePublisher
{
private readonly ServiceBusSender _serviceBusSender;
public MessagePublisher(ServiceBusSender serviceBusSender)
{
_serviceBusSender = serviceBusSender;
}
public Task Publish<T>(T obj)
{
string objAsText = JsonConvert.SerializeObject(obj);
ServiceBusMessage message = new ServiceBusMessage(Encoding.UTF8.GetBytes(objAsText));
message.ApplicationProperties["messageType"] = typeof(T).Name;
return _serviceBusSender.SendMessageAsync(message);
}
public Task Publish(string raw)
{
ServiceBusMessage message = new ServiceBusMessage(Encoding.UTF8.GetBytes(raw));
message.ApplicationProperties["messageType"] = "Raw";
return _serviceBusSender.SendMessageAsync(message);
}
public Task<long> PublishScheduled<T>(T obj, DateTimeOffset time)
{
string objAsText = JsonConvert.SerializeObject(obj);
ServiceBusMessage message = new ServiceBusMessage(Encoding.UTF8.GetBytes(objAsText));
message.ApplicationProperties["messageType"] = typeof(T).Name;
return _serviceBusSender.ScheduleMessageAsync(message, time);
}
}要注册MessagePublisher,请尝试:
services.AddSingleton<IMessagePublisher>(p =>
new MessagePublisher(
new ServiceBusClient(Configuration["ServiceBus:ConnectionString"]).CreateSender(Configuration["ServiceBus:TopicName"])));注意:还有其他方法来注册消息发布者,请参阅如何注册ServiceBusClient以进行依赖注入?。不过,您可能需要对MessagePublisher进行一些小的修改。
https://stackoverflow.com/questions/73359526
复制相似问题