我目前正在试用 ServiceStack 的持久性迷你分析器功能,目前在为我的 Redis 消息队列处理程序注册配置文件信息时遇到问题。
更多背景知识:我有一些常规的 REST api 处理程序,它们接收请求,推迟帐户信息的一些更新并将 OK 回复给调用者。这些消息使用ServiceStack Redis MQ 模式发布到 Redis 服务器。因此,Redis 消息处理注册为:
var redisFactory = new PooledRedisClientManager(redisClients);
var mqHost = new RedisMqServer(redisFactory, retryCount: 2);
var defaultThreadCount = 4;
mqHost.RegisterHandler<SomeDto>(m => this.ServiceController.ExecuteMessage(m), noOfThreads:defaultThreadCount);
mqHost.RegisterHandler<SomeOtherDto>(m => this.ServiceController.ExecuteMessage(m), noOfThreads:defaultThreadCount);
mqHost.Start();
我的消息也得到了妥善处理。
在自定义 ServiceRunner中,我启用了对所有请求的分析,BeforeEachRequest
并添加了一个自定义 Profiler 步骤,如下所示:
public override void BeforeEachRequest(IRequest requestContext, T request)
{
Profiler.Start();
using (Profiler.StepStatic("Executing handler"))
{
base.BeforeEachRequest(requestContext, request);
}
}
我的所有 HTTP REST 请求都发送到 SQL 表,但没有注册任何 MQ 处理程序调用。而且我 100% 确信处理程序确实正在执行,因为该执行的结果存储在 MongoDB 集合中。
有什么我想念的吗?
- 编辑 -
我忘了提到这个项目确实是通过 ASP.NET 应用程序托管的。AppHost 在 Global.asax 中初始化App_Start
- 我只是发现“请求前”处理自定义服务运行程序而不是 ASP.NETBegin_Request
处理程序更方便。