C# 来自上下文的Hangfire服务器名
我们正在尝试从正在运行的后台作业获取Hangfire服务器名。这可能吗?如果可能,如何实现 到目前为止,我们已经查看了C# 来自上下文的Hangfire服务器名,c#,.net,hangfire,C#,.net,Hangfire,我们正在尝试从正在运行的后台作业获取Hangfire服务器名。这可能吗?如果可能,如何实现 到目前为止,我们已经查看了ProcessContext对象,但它似乎没有包括ServerName 谢谢你的帮助。我知道以下内容并不能完全回答你关于从工作中阅读这本书的问题,据我所知,这似乎是不可能的。如果这是不可能的,这个答案可能会有帮助,所以给你 我不确定是否有从某处阅读它的选项 无论如何,Hangfire文档显示您可以手动处理服务器名称: 由于默认值仅在流程级别上提供唯一性,因此如果要在同一流程内运行
ProcessContext
对象,但它似乎没有包括ServerName
谢谢你的帮助。我知道以下内容并不能完全回答你关于从工作中阅读这本书的问题,据我所知,这似乎是不可能的。如果这是不可能的,这个答案可能会有帮助,所以给你 我不确定是否有从某处阅读它的选项 无论如何,Hangfire文档显示您可以手动处理服务器名称: 由于默认值仅在流程级别上提供唯一性,因此如果要在同一流程内运行不同的服务器实例,则应手动处理该值:
var options=new BackgroundJobServerOptions
{
ServerName=String.Format(
"{0}.{1}",
Environment.MachineName,
Guid.NewGuid().ToString())
};
var服务器=新的BackgroundJobServer(选项);
//或
app.UseHangfireServer(选项);
盲射(未测试),但我会使用IApplyStateFilter
尝试类似的方法:
public class GetServerIdFilter : IApplyStateFilter
{
public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
var state = context.NewState as ProcessingState;
if (state != null)
{
var serverId = state.ServerId;
var workerId = state.WorkerId;
}
}
public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
}
}
过滤器可以在中注册为谢谢。我们正在使用
BackgroundJobServerOptions
创建服务器,但我们试图解决的问题是如何获取在多服务器情况下运行作业所使用的服务器。我们需要知道在执行作业时选择池中的哪个服务器。