servicestack 在ServiceStack中创建C#Amazon SQS客户端,servicestack,servicestack" /> servicestack 在ServiceStack中创建C#Amazon SQS客户端,servicestack,servicestack" />

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

servicestack 在ServiceStack中创建C#Amazon SQS客户端,servicestack,servicestack,使用amazonsqs作为servicestack的MQ服务器是不可能的 但是消息发布者是前端web代码,当您深入研究应用程序时,它使用的是Rabbit MQ 存在ServiceStack,但它不使用消息传递API 尝试在电子邮件联系人中使用Rabbit MQ集成测试作为示例: [Test] public void Can_Send_Email_via_MqClient() { var mqFactory = new RabbitMqMessageFactory(); usin

使用amazonsqs作为servicestack的MQ服务器是不可能的

但是消息发布者是前端web代码,当您深入研究应用程序时,它使用的是Rabbit MQ

存在ServiceStack,但它不使用消息传递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!
    }
}
[事实(DisplayName=“测试成功发布和接收消息”)]
公共异步void TestMessage()
{
var mqFactory=新的SQS连接工厂(“awskey”、“awssecret”、RegionEndpoint.USWest1);
使用(IAmazonSQS mqClient=mqFactory.GetClient())
{
var req=新的SendMessageRequest(“查询”、“你好”);
等待mqClient.SendMessageAsync(req);
//mqClient.Publish(新Hello{Name=“World”});
//var rec=new ReceiveMessageRequest();
//等待mqClient.Re
//var responseMsg=mqClient.Get(QueueNames.In);
//mqClient.Ack(responseMsg);
//responseMsg.GetBody().Result/=你好,世界!
}
}
是否有使用ServiceStack消息传递API和SQS作为MQ服务器的示例应用程序

存在ServiceStack,但它不使用消息传递API

注意:AWS应用程序确实注册了:

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

注意:对
/oneway
预定义端点的请求是

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

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

如何定义要使用的Amazon SQS队列名称,我有多个SQS队列,一个名为“queue1”,另一个名为“queue2”@BrianOgden ServiceStack MQ根据队列名称处理队列的创建和命名。每个不同的请求DTO/队列类型都需要自己的队列,但如果您希望此应用的所有队列都以
站点开头,则可以从静态配置类中进行一些自定义,如
QueueNames.SetQueuePrefix(“site1”)
。(任何配置都需要在服务器和客户端上设置&仅在启动时设置一次)
var mqFactory = HostContext.TryResolve<IMessageFactory>(); //or
//var mqFactory = HostContext.TryResolve<IMessageService>().MessageFactory;

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