当在AKS中使用KEDA时,可能会遇到消息未被从队列中接收的问题。解决此问题的常见方法是通过在容器中运行的程序中添加KEDA的标记以及一些额外的代码来处理队列中未接收的消息。
首先,需要在KEDA扩展中的PodSpec中添加标记:
env:
- name: RedisKey
value: "RedisKey"
- name: CUSTOM_KEDA_TRIGGER_IDENTIFIERS
value: "redis-pubsub"
上面的标记可以更改为与您使用的队列组件的标记相对应。
然后在程序代码中添加以下代码段,以从队列中接收未处理的消息:
using (var connection = ConnectionMultiplexer.Connect(configuration["RedisKey"]))
{
var downstreamConfig = new SubscriberRedisConfiguration(new[] { new ChannelConfiguration("redis-pubsub", RedisMessageType.String) });
downstreamConfig.Subscribe(async (messageType, messageContext) =>
{
// Process the message here
});
Console.ReadLine();
}
在这里,我们使用C#作为开发语言和StackExchange.Redis作为队列组件,但是这个解决方案可以适用于大多数队列组件。
这样,当KEDA自动扩展Pod数量时,新Pod即可进行消息处理。