RabbitMQ

official site
Get Started
Docs
Downloading and Installing RabbitMQ
podman

docker

Management Plugin rabbitmq default username and password of guest/guest

1
2
3
docker run -d -p 5672:5672 -p 15672:15672 --name containerName imageID
docker run -d -p 5672:5672 -p 15672:15672 --name containerName imageName:version
docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3.11-management-alpine

go to container exit container will not stop

1
2
3
docker exec -it containerID /bin/bash
# alpine linux
docker exec -it containerID /bin/sh

go to container exit container will stop

1
docker attach containerID

exit container

  • exit 退出容器伪终端并关闭容器
  • ctrl+d 退出容器伪终端并关闭容器
  • ctrl+c 退出容器伪终端不关闭容器
  • ctrl+p+ctrl+q 退出容器伪终端不关闭容器

rabbitmqadmin

exchange

1
rabbitmqadmin -u username -p password declare exchange name=exchange type=topic

queue

1
rabbitmqadmin -u username -p password declare queue name=queue  durable=true

binding

1
rabbitmqadmin -u username -p password declare binding source=exchange destination=queue routing_key=key

k8s

rabbitmq-deployment.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq-deployment
  labels:
    app: rabbitmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:3.8.26-management-alpine
        imagePullPolicy: Never # IfNotPresent Always Never
        ports:
        - name: manager
          containerPort: 15672
          protocol: TCP
        - name: http
          containerPort: 5672
          protocol: TCP
        env:
        - name: RABBITMQ_DEFAULT_USER
          value: user
        - name: RABBITMQ_DEFAULT_PASS
          value: "123456"
        volumeMounts:
          - name: mq-time
            mountPath: /etc/localtime
            readOnly: true
      volumes:
        - name: mq-time
          hostPath:
            path: /etc/localtime

Create the Deployment

1
2
3
4
5
6
7
8
kubectl apply -f rabbitmq-deployment.yaml
kubectl get deployments
kubectl get deploy -o wide
kubectl get rs
kubectl get rs -w
kubectl get pods
kubectl get pods --show-labels
kubectl describe po -l app=rabbitmq

Scaling a Deployment

1
2
kubectl scale deployment/rabbitmq-deployment --replicas=3
kubectl autoscale deployment/rabbitmq-deployment --min=3 --max=5 --cpu-percent=80

update

1
2
3
4
5
kubectl set image deployment.v1.apps/rabbitmq-deployment rabbitmq=rabbitmq:3.9-management-alpine
kubectl set image deployment/rabbitmq-deployment rabbitmq=rabbitmq:3.9-management-alpine
kubectl rollout status deployment/rabbitmq-deployment
kubectl rollout history deployment/rabbitmq-deployment
kubectl rollout history deployment/rabbitmq-deployment --revision=2

rollback

1
2
kubectl rollout undo deployment/rabbitmq-deployment
kubectl rollout undo deployment/rabbitmq-deployment --to-revision=2

Pausing and Resuming a Deployment

1
2
3
4
5
6
7
8
9
# 暂停
kubectl rollout pause deployment/rabbitmq-deployment

# 执行更新等操作
# do something 
# 执行更新等操作

# 恢复 并应用更新
kubectl rollout resume deployment/rabbitmq-deployment

rabbitmq-service.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-service
spec:
  type: NodePort
  selector:
    app: rabbitmq
  ports:
    - name: manager
      protocol: TCP
      port: 15672
      targetPort: 15672
      nodePort: 30001
    - name: http
      protocol: TCP
      port: 5672
      targetPort: 5672
      nodePort: 30002