无需等待的 AWS SQS
AWS SQS without Await
我有一个将消息发送到 SQS 队列的 .Net Lambda 函数。
我希望能够“触发并忘记”这些消息……也就是说,我不想“等待”回复。然而,AWS 的 SQS 客户端仅提供异步方法(例如 SendMessageAsync)。如果我不“等待”这个调用,那么消息永远不会到达队列中。
关于这个主题我找不到太多。我在网上看到很多使用“SendMessage”的 SQS 示例,但我的假设是代码是使用 AWS SDK 的 2.5 版(或更早版本)编写的(有几个实际上是在等待 SendMessage)。较新的版本没有方法的非异步版本。
我确实发现了一个类似的 Whosebug 问题 (QqsClient.SendMessageAsync without await doesn't work),但它询问如何等待发送多条消息,而我希望完全避免等待。
此代码将发送一条消息:
using Amazon.SQS;
public class SQSHelper
{
private AmazonSQSClient client = new AmazonSQSClient(Amazon.RegionEndpoint.USEast2);
public async Task<string> SendMessage(string queue, string message)
{
var response = await client.SendMessageAsync(queue, message);
}
}
但是这段代码不会
using Amazon.SQS;
public class SQSHelper
{
private AmazonSQSClient client = new AmazonSQSClient(Amazon.RegionEndpoint.USEast2);
public void SendMessage(string queue, string message)
{
client.SendMessageAsync(queue, message);
}
}
是否可以在不等待响应的情况下发送 SQS 消息?
您不仅在等待回复,还在等待消息的发送。由于它也是一个 lambda 函数,一旦 lambda 处理程序 returns 您的进程结束,它会在完成发送消息之前关闭与 SQS 的 HTTP 连接。这将在本地工作,因为您的本地进程仍在执行,但在 lambda 函数上,它会在大多数情况下丢失消息。
如果响应时间有问题,您可以压缩您的负载,这将减少传输到 SQS 并获得响应所需的时间。
我有一个将消息发送到 SQS 队列的 .Net Lambda 函数。
我希望能够“触发并忘记”这些消息……也就是说,我不想“等待”回复。然而,AWS 的 SQS 客户端仅提供异步方法(例如 SendMessageAsync)。如果我不“等待”这个调用,那么消息永远不会到达队列中。
关于这个主题我找不到太多。我在网上看到很多使用“SendMessage”的 SQS 示例,但我的假设是代码是使用 AWS SDK 的 2.5 版(或更早版本)编写的(有几个实际上是在等待 SendMessage)。较新的版本没有方法的非异步版本。
我确实发现了一个类似的 Whosebug 问题 (QqsClient.SendMessageAsync without await doesn't work),但它询问如何等待发送多条消息,而我希望完全避免等待。
此代码将发送一条消息:
using Amazon.SQS;
public class SQSHelper
{
private AmazonSQSClient client = new AmazonSQSClient(Amazon.RegionEndpoint.USEast2);
public async Task<string> SendMessage(string queue, string message)
{
var response = await client.SendMessageAsync(queue, message);
}
}
但是这段代码不会
using Amazon.SQS;
public class SQSHelper
{
private AmazonSQSClient client = new AmazonSQSClient(Amazon.RegionEndpoint.USEast2);
public void SendMessage(string queue, string message)
{
client.SendMessageAsync(queue, message);
}
}
是否可以在不等待响应的情况下发送 SQS 消息?
您不仅在等待回复,还在等待消息的发送。由于它也是一个 lambda 函数,一旦 lambda 处理程序 returns 您的进程结束,它会在完成发送消息之前关闭与 SQS 的 HTTP 连接。这将在本地工作,因为您的本地进程仍在执行,但在 lambda 函数上,它会在大多数情况下丢失消息。
如果响应时间有问题,您可以压缩您的负载,这将减少传输到 SQS 并获得响应所需的时间。