C# 如何在web api中使用消息传递(Amazon SQS)将创建的id返回给客户端

C# 如何在web api中使用消息传递(Amazon SQS)将创建的id返回给客户端,c#,amazon-web-services,asp.net-web-api,amazon-sqs,microservices,C#,Amazon Web Services,Asp.net Web Api,Amazon Sqs,Microservices,刚刚开始使用AmazonSQS服务,所以想知道是否有人可以引导我进入正确的方向。 如果我将RESTWebAPI接口公开给客户机,并且在每个http请求之后,我希望向我的单独服务发送异步消息,该服务负责在数据库中创建特定实体,并使用一些逻辑进行处理。大概是这样的: var auctionRegistrationCommand = AuctionRegistrationCommand .CreateFromRequest(lotId, request);

刚刚开始使用AmazonSQS服务,所以想知道是否有人可以引导我进入正确的方向。 如果我将RESTWebAPI接口公开给客户机,并且在每个http请求之后,我希望向我的单独服务发送异步消息,该服务负责在数据库中创建特定实体,并使用一些逻辑进行处理。大概是这样的:

        var auctionRegistrationCommand = AuctionRegistrationCommand
            .CreateFromRequest(lotId, request);

        //var sqsClient = new AmazonSQSClient();
        //var response = sqsClient.SendMessageAsync(..resitrationCommaon..);

创建实体后,我想将创建的实体的Id返回给我的客户机,以便它可以使用它来更新它或对RESTAPI进行一些额外的调用。但是我找不到怎么做。是否存在任何模式或方法来支持此类场景?看到一些使用Amazon SQS的示例将非常完美,但一般性解释也会非常有用。

假设您的两个系统是S1和S2,其中发生以下情况:

  • S1向SQS发送消息。这个步骤是异步的
  • S2创建所需的实体
  • S1应通知调用方新创建的实体id
  • #考虑到异步系统的本质,3并不简单。例如,您不知道S2何时处理您的请求

    可能的解决办法:

  • S1向SQS发送消息。SQS返回一个
    MessageId
    作为响应。您将此
    MessageId
    返回给客户端
  • S1和S2都有一个共享数据存储(例如,Memcache、MySQL等),存储
    MessageId
    到entity-id的映射。每当S2处理消息并创建新实体时,它都会在共享数据存储中更新该映射
  • 客户端使用
    MessageId
    轮询S1。S1从数据存储返回映射,只要它是非空的

  • 可以从SQS的SendMessage API中找到
    MessageId
    的文档。

    假设您的两个系统是S1和S2,其中发生以下情况:

  • S1向SQS发送消息。这个步骤是异步的
  • S2创建所需的实体
  • S1应通知调用方新创建的实体id
  • #考虑到异步系统的本质,3并不简单。例如,您不知道S2何时处理您的请求

    可能的解决办法:

  • S1向SQS发送消息。SQS返回一个
    MessageId
    作为响应。您将此
    MessageId
    返回给客户端
  • S1和S2都有一个共享数据存储(例如,Memcache、MySQL等),存储
    MessageId
    到entity-id的映射。每当S2处理消息并创建新实体时,它都会在共享数据存储中更新该映射
  • 客户端使用
    MessageId
    轮询S1。S1从数据存储返回映射,只要它是非空的

  • 可以从SQS的SendMessageAPI中找到
    MessageId
    的文档。

    第一部分是SQS的用例,第二部分更像是SNS的用例。一种简单的方法是让客户端轮询状态。使用单向消息传递时,应避免同步通信。客户端应该生成id(使用guid),后端可以使用它来创建记录。有意义吗?第一部分是SQS的用例,第二部分更像是SNS的用例。一种简单的方法是让客户端轮询状态。使用单向消息传递时,应避免同步通信。客户端应该生成id(使用guid),后端可以使用它来创建记录。有道理?