servicestack - 在 ServiceStack 中创建 C# Amazon SQS 客户端

标签 servicestack

some documentation关于使用 Amazon SQS 作为 ServiceStack 的 MQ 服务器 Messaging API

但是消息发布者是前端 Web 代码,当您深入研究 Email Contacts demo 时应用程序,它正在使用 Rabbit MQ。

有一个ServiceStack Email Contacts AWS App demo但它不使用消息 API。

尝试使用电子邮件联系人中的 Rabbit MQ 集成测试作为示例:

[Test]
public void Can_Send_Email_via_MqClient()
{
    var mqFactory = new RabbitMqMessageFactory();

    using (var mqClient = mqFactory.CreateMessageQueueClient())
    {
        mqClient.Publish(new EmailContact { ContactId = 1, Subject = "UnitTest MQ Email #1", Body = "Body 1" });
        mqClient.Publish(new EmailContact { ContactId = 1, Subject = "UnitTest MQ Email #2", Body = "Body 2" });
    }
}

我很快就感到困惑并误入歧途,Sqs 的 ServiceStack API 似乎与 RabbitMQ 非常不同。我什至似乎无法使用强类型 POCO 作为消息:

[Fact(DisplayName = "Tests that a successful message is published and received")]
public async void TestMessage()
{
    var mqFactory = new SqsConnectionFactory("awskey", "awssecret", RegionEndpoint.USWest1);

    using (IAmazonSQS mqClient = mqFactory.GetClient())
    {
        var req = new SendMessageRequest("query", "hello");

        await mqClient.SendMessageAsync(req);
        //mqClient.Publish(new Hello { Name = "World" });

        //var rec = new ReceiveMessageRequest();
        //await mqClient.Re

        //var responseMsg = mqClient.Get<HelloResponse>(QueueNames<HelloResponse>.In);
        //mqClient.Ack(responseMsg);
        //responseMsg.GetBody().Result //= Hello, World!
    }
}

是否有使用 ServiceStack Messaging API 并使用 SQS 作为 MQ 服务器的示例应用程序?

最佳答案

There is a ServiceStack Email Contacts AWS App demo but it doesn't use the Messaging API.

注意 AWS Apps 确实注册了 AWS SqsMqServer :

//EmailContacts
ConfigureSqsMqServer(container);

//..

private void ConfigureSqsMqServer(Container container)
{
    container.Register<IMessageService>(c => new SqsMqServer(
        AwsConfig.AwsAccessKey, AwsConfig.AwsSecretKey, RegionEndpoint.USEast1) {
        DisableBuffering = true,
    });

    var mqServer = container.Resolve<IMessageService>();
    mqServer.RegisterHandler<EmailContacts.EmailContact>(ExecuteMessage);
    mqServer.Start();
}

SqsMqServerTests.cs 中还有很多示例。 .

如果您想使用ServiceStack MQ's high-level APIs ,您需要直接使用 ServiceStack 的 MQ 类而不是 AWS 的 SQS 类。

基本上它的工作方式与其他 MQ 服务器一样,您可以从 IMessageFactoryIMessageService(在您的 AppHost 中注册)获取 MQ 客户端,并使用它来发布 DTO:

var mqFactory = HostContext.TryResolve<IMessageFactory>(); //or
//var mqFactory = HostContext.TryResolve<IMessageService>().MessageFactory;

using (var mqClient = mqFactory.CreateMessageQueueClient())
{
    mqClient.Publish(new Hello { Name = "World" });
}

尽管 ServiceStack 服务中的首选 API 是使用 PublishMessage():

PublishMessage(new Hello { Name = "World" });

Note requests to the /oneway pre-defined endpoint are automatically published to the registered MQ Server.

在没有注册 SqsMqServer 的客户端应用中,您将创建一个 SqsMqMessageFactory:

var mqFactory = new SqsMqMessageFactory(new SqsQueueManager(...));
using (var mqClient = mqFactory.CreateMessageQueueClient())
{
    mqClient.Publish(new Hello { Name = "World" });
}

关于servicestack - 在 ServiceStack 中创建 C# Amazon SQS 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585038/

相关文章:

c# - 指定向 ServiceStack 发送一个参数作为查询参数

c# - 客户端和服务器中的 ServiceStack 服务 URL

asp.net - 将 json 反序列化为匿名类型列表

c# - 如何在 ASP.Net MVC Controller 中正确使用 ServiceStack 认证

c# - MVC 4 Forms 身份验证的持久 ServiceStack 身份验证

c# - ServiceStack.Redis 服务可用性

redis - 如何使用ServiceStack.Redis消息队列发送邮件通知?

servicestack - 自定义 AspNetWindowsAuthProvider

node.js - 分布式认证

api - 在 ServiceStack 中我可以选择哪些选项来为每个请求分配唯一的 ID?