0

我在远程(cloudamqp.com)上使用 rabbitmq,并在 Kubernetes 上创建了一个 cron 作业。在我的本地机器上,我的工作运行良好,Kubernetes cronJob 的调度非常好,但是 Job 将 rabbitmq 连接 URL 重定向到127.0.0.1:5672 ,我得到一个错误。

pika.exceptions.ConnectionClosed: Connection to 127.0.0.1:5672 failed: [Errno 111] Connection refused

我检查了 cron 作业的日志,我的连接 URL 非常好,但是当 pika 尝试连接到主机时,它会自动重定向到,127.0.0.1:5672因为我们知道 cron pod 没有运行任何rabbitmq 服务器,因此它拒绝连接。

CronJob.yml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: scrape-news
spec:
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: scrape-news
        spec:
          containers:
          - name: scrape-news
            image: SCRAPER_IMAGE
            imagePullPolicy: Always
          restartPolicy: Never
  schedule: '* * * * *'
  successfulJobsHistoryLimit: 3

RabbitMQ 连接

    print(env.RABBIT_URL)
    self.params = pika.URLParameters(env.RABBIT_URL)
    self.connection = pika.BlockingConnection(parameters=self.params)
    self.channel = self.connection.channel() # start a channel

连接 URL 完全相同,适用于我的本地设置。

4

1 回答 1

2

根据您的CronJob规范,您没有传递环境变量RABBIT_URL

您的代码看起来好像期望设置此变量,但事实并非如此,这可能是它默认为localhost.

self.params = pika.URLParameters(env.RABBIT_URL)

你可能想要这样的东西:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: scrape-news
spec:
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: scrape-news
        spec:
          containers:
          - name: scrape-news
            image: SCRAPER_IMAGE
            imagePullPolicy: Always
            env:
              - name: RABBIT_URL
                value: cloudamqp.com
          restartPolicy: Never
  schedule: '* * * * *'
  successfulJobsHistoryLimit: 3
于 2018-10-29T08:39:21.553 回答