栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过我域中引发的事件在RedMQ中设置处理程序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过我域中引发的事件在RedMQ中设置处理程序

ServiceStack在为MQ的服务,REST,HTML或SOAP服务创建的服务之间没有区别,它们是同一回事。也就是说,它们各自接受一个请求DTO,并有选择地返回一个响应DTO,并且同一服务可以处理来自任何端点或格式(例如HTML,REST,SOAP或MQ)的调用。

请参阅ServiceStack的体系结构图以了解MQ的适用范围。

局限性

您需要记住的唯一事情是:

  • 像SOAP一样,MQ只支持1动词,因此您的方法需要命名为 PostAny
  • 仅执行动作过滤器(即不执行全局或属性过滤器)
  • 你得到MqRequest和MqResponse存根到位
    IHttpRequest
    IHttpResponse
    。您仍然可以
    .Items
    通过请求管道传递数据,但是任何HTTP操作(如设置cookie或HTTP标头)都是良性的

配置Redis MQ主机

MQ主机本身与其余的ServiceStack框架完全分离,后者直到您自己将消息传递给ServiceStack时才知道MQ的存在,这通常是在已注册的处理程序中完成的,例如:

var redisFactory = new PooledRedisClientManager("localhost:6379");var mqHost = new RedisMqServer(redisFactory, retryCount:2);mqHost.RegisterHandler<Hello>(m => {    return this.ServiceController.ExecuteMessage(m);});//shorter version://mqHost.RegisterHandler<Hello>(ServiceController.ExecuteMessage);mqHost.Start(); //Starts listening for messages

在您中

RegisterHandler<T>
,指定您希望其侦听的请求的类型。

默认情况下,您只能为每个消息注册一个处理程序,并且在ServiceStack中,一个Request绑定到一个已知的Service实现,对于MQ而言,它正在寻找首先匹配的方法签名:

Post(Hello)
如果不存在,则在其中查找后备
Any(Hello)

可以自己为每个消息添加多个处理程序

如果要调用多个处理程序,则只需维护自己的处理程序,然后

List<Handler>
在请求进入时执行所有这些处理程序即可。

拨打不同的服务

如果要调用其他服务,只需将其转换为其他Request DTO,然后将其传递给ServiceController。

任何人发送MQ请求时,例如:

mqClient.Publish(new Hello { Name = "Client" });

使用IMessage类型的实例调用您的处理程序,其中,请求DTO包含在
Body 属性中。此时,您可以选择丢弃消息,对其进行验证或对其进行更改。

MQ请求与任何其他服务请求相同

在大多数情况下,通常只需将消息转发到ServiceController即可进行处理,其实现是:

public object ExecuteMessage<T>(IMessage<T> mqMsg){    return Execute(mqMsg.Body, new MqRequestContext(this.Resolver, mqMsg));}

该实现仅从 mqMsg.Body中 提取出请求DTO,然后将该消息作为从该点开始通过C#请求DTO传递的普通服务进行处理,并带有一个包含MQ
IHttpRequest和IHttpResponse存根的MqRequestContext。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397784.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号