代码之家  ›  专栏  ›  技术社区  ›  hikari_temp

在kubernetes内从redis服务器集中不同主题时,生菜的不一致行为

  •  0
  • hikari_temp  · 技术社区  · 3 年前

    我目前在Kubernetes集群内的Spring Boot应用程序中尝试通过生菜从Redis服务器的两个不同主题进行池时遇到了一些问题。尽管来自第一个主题的消息池总是有效的,但第二个主题似乎只是在重新启动Kubernetes集群时偶然有效(这可能表明它可能与部署有关)。

    消息被正确发布(它们在redis insight中可见),并且两个池化类都使用相同的Java代码通过生菜进行池化,这使得只有一个在工作变得奇怪。池的实现方式如下所示:

     @PostConstruct
        @Override
        protected void connectToRedis() {
            RedisClient redisClient = RedisClient.create("redis://" + REDIS_ADDRESS + ":" + REDIS_PORT);
            StatefulRedisConnection<String, String> connection = redisClient.connect();
            session = connection.sync();
    
            initialize(session);
        }
    
        @Override
        @Scheduled(initialDelay = INITIAL_DELAY_MS, fixedDelay = FIXED_DELAY_MS)
        public void pullEvents(){
            System.out.println("pullEvents for member service entered");
    
            for (String key : STREAMS_KEYS) {
                Map<String, String> jsonEvents = pullJSONs(key);
    
                for (Map.Entry<String, String> entry : jsonEvents.entrySet()) {
                    readEvents(entry.getValue(), key, entry.getKey());
                }
            }
        }
    

    如上所述,我的应用程序与其他微服务一起在Kubernetes集群中运行。我的应用程序会侦听我发布的自己的事件(针对CQRS),以及发布到具有不同主题名称的同一redis服务器的另一个微服务中的事件。所有的微服务在它们各自的redis文件夹中都有一个服务和部署yaml,就像这样(它看起来总是一样的,因为我们想使用一个redis实例,我已经通过kubectl get-All检查了只有一个redi实例在运行):

    redisService.yaml:

    apiVersion: v1
    kind: Service
    metadata: 
      name: redis
      labels: 
        app: redis
    spec: 
      selector: 
        app: redis
      ports: 
        - name: redis
          port: 6379
    

    redisDeploymnt.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis
      labels:
        app: redis
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: redis
      template:
        metadata:
          labels:
            app: redis
        spec:
          containers:
            - name: redis
              image: redis:alpine
              ports:
              - containerPort: 6379
    

    我真的很难找到原因,尤其是当它随机工作时。我猜测这与Kubernetes启动每个容器的顺序有关。

    提前感谢!

    0 回复  |  直到 3 年前