gpt4 book ai didi

ServiceStack 消息队列处理和 Profiler

转载 作者:行者123 更新时间:2023-12-04 04:08:06 25 4
gpt4 key购买 nike

我目前正在试用 ServiceStack 的持久性迷你分析器功能,但我目前在为我的 Redis 消息队列处理程序注册配置文件信息时遇到问题。

更多背景:我有一些常规的 REST api 处理程序,它们接受请求,推迟一些帐户信息的更新,然后将 OK 回复给调用者。这些消息使用 ServiceStack Redis MQ pattern 发布到 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();

我的消息也得到妥善处理。

custom ServiceRunner 中我在 BeforeEachRequest 中启用了对所有请求的分析,并添加了一个自定义分析器步骤,如下所示:

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.NET Begin_Request 处理程序更方便.

最佳答案

我在自托管服务器上遇到了类似的问题。问题在于分析器使用 HttpContext.Current 来存储分析结果。如果没有有效的上下文,它不知道将结果添加到哪个分析“ session ”。

可以通过设置 Profile.Settings.ProfilingProvider 来实现您自己的 ProfilingProvider,但是,除非我遗漏了什么,否则在异步中正确实现它会很棘手(如果不是不可能的话)具有当前 IProfilerProvider 接口(interface)的环境。

关于ServiceStack 消息队列处理和 Profiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com