有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 服务器一样,您可以从 IMessageFactory
或 IMessageService
(在您的 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/