C# 如何向部署在Kubernetes上的特定pod发送命令?
我在一个包含2个副本的容器中部署了一个微服务。所以我有两个豆荚。此微服务通过Azure服务总线从另一个服务接收命令。我的问题是我想用两个pod中的一个来检索命令。我尝试启用会话并使用SessionId,但仍然在错误的pod中接收命令。有没有办法做到这一点 在这里,我将介绍如何配置总线(使用masstransit库)C# 如何向部署在Kubernetes上的特定pod发送命令?,c#,kubernetes,.net-core,azureservicebus,C#,Kubernetes,.net Core,Azureservicebus,我在一个包含2个副本的容器中部署了一个微服务。所以我有两个豆荚。此微服务通过Azure服务总线从另一个服务接收命令。我的问题是我想用两个pod中的一个来检索命令。我尝试启用会话并使用SessionId,但仍然在错误的pod中接收命令。有没有办法做到这一点 在这里,我将介绍如何配置总线(使用masstransit库) 我不相信以任何方式区分副本的最佳实践,因为它们是无状态的,在pod级别没有特定的标识符,所以您无法保证以一种可靠的方式区分它们 对于像您这样的场景,您应该选择,这为pod提供了一个顺
我不相信以任何方式区分副本的最佳实践,因为它们是无状态的,在pod级别没有特定的标识符,所以您无法保证以一种可靠的方式区分它们 对于像您这样的场景,您应该选择,这为pod提供了一个顺序标识符,您可以使用它来区分它们(并保证它)。根据标识符的不同,您可以使用特殊队列(或对单个主题的订阅)来处理特定的pod
var bus = Bus.Factory.CreateUsingAzureServiceBus(sbc =>
{
var host = sbc.Host(_configuration["myConnectionString"], h => { });
sbc.ConfigureSend(x => x.UseExecute(context =>
{
var sessionId = EnvConstants.SessionId;
context.SetSessionId(sessionId);
}));
sbc.ReceiveEndpoint(host, _configuration["myQueueName"], e =>
{
e.RequiresSession = true;
e.Instance(consumer);
e.UseContextFilter(c =>
{
//I tryed this filter but sends my command to the skipped queue.
var sameSessionId = c.SessionId() == EnvConstants.SessionId;
return Task.FromResult(sameSessionId);
});
});
});