gpt4 book ai didi

.net - 在集成测试中消息未发送到 Azure 服务总线

转载 作者:行者123 更新时间:2023-12-02 07:33:20 25 4
gpt4 key购买 nike

我想执行涉及与服务总线交互的集成测试。我注意到有些消息没有发送,即使没有抛出异常。我正在使用免费的 ASB。

这是负责发送消息的服务方法:

    public class ServiceBusMessagingSender<T> : IMessagingSender<T> where T : IMessage
{

private readonly string _connectionString = Environment.GetEnvironmentVariable("SERVICE_BUS_CONNECTION_STRING_SENDER");
private readonly ServiceBusSender _sender;
private readonly IMessageSerializer<T> _messageSerializer;

public ServiceBusMessagingSender(string queueName, IMessageSerializer<T> messageSerializer, string connectionString=null)
{
_messageSerializer = messageSerializer;
_connectionString ??= connectionString;
var client = new ServiceBusClient(_connectionString);
this._sender = client.CreateSender(queueName);
}


public void SendMessage(T message)
{
var serviceBusMessage = _messageSerializer.Serialize(message);
_sender.SendMessageAsync(serviceBusMessage).GetAwaiter().GetResult();
}

然后在 NUnit 套件的测试中调用此方法:

    public class EndtoEndTests {

private readonly ServiceBusMessagingSender<DataRequestDto> _messagingSender = new(RequestsQueue, new MessageSerializer<DataRequestDto>(), WriterConnectionString);


[Test]
public void GoodTypes()
{
//...

//WHEN
var request = new GoodTypesRequest()
{
RequestTimeStamp = DateTime.Now,
RequestType = RequestType.GoodTypes
};

_messagingSender.SendMessage(request );
///...
}
}

我正在为 ASB 使用以下版本的软件包:

    <PackageReference Include="Azure.Messaging.ServiceBus" Version="7.2.0" />
<PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.1.3" />

最佳答案

您正在 void 内调用异步方法,因此您最终会陷入竞争条件:发送是否可以在函数关闭之前完成。将您的函数更改为任务而不是无效,问题就会消失。您可能还想更改 _sender.SendMessageAsync(serviceBusMessage).GetAwaiter().GetResult();await _sender.SendMessageAsync(serviceBusMessage); 以便于阅读代码。

关于.net - 在集成测试中消息未发送到 Azure 服务总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68945752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com