调整rabbitmq配置

准备

mkdir -p /tmp/rabbitmq
cd /tmp/rabbitmq
kubectl config set-context --current --namespace jtest

带延迟队列插件的rabbitmq镜像

延迟队列插件: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/v3.8.0

复制到对应目录

mkdir plugins
# scp ...

Dockerfile

FROM rabbitmq:3.8.4-management-alpine

ENV TZ="Asia/Shanghai"

# https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/v3.8.0
ADD plugins/rabbitmq_delayed_message_exchange-3.8.0.ez /plugins

RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange

构建镜像并上传到私有仓库

docker build -t wy_spc/rabbitmq:3.8.4-management-alpine .
docker tag wy_spc/rabbitmq:3.8.4-management-alpine harbor.ole12138.cn/wy_spc/rabbitmq:3.8.4-management-alpine
docker login -u admin -p Harbor12345 harbor.ole12138.cn
docker push harbor.ole12138.cn/wy_spc/rabbitmq:3.8.4-management-alpine

部署rabbitmq服务

rabbitmq-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
   name: rabbitmq-nas-csi-pvc
spec:
   accessModes:
      - ReadWriteMany
   storageClassName: nfs-storage
   resources:
      requests:
         storage: 10Gi
kubectl apply -f ./rabbitmq-pvc.yaml

rabbitmq-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
   name: rabbitmq
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
   name: endpoint-reader
rules:
   - apiGroups: [""]
     resources: ["endpoints"]
     verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
   name: endpoint-reader
subjects:
   - kind: ServiceAccount
     name: rabbitmq
roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: Role
   name: endpoint-reader

注意这里的apiVersion已经是v1版本了。

kubectl apply -f ./rabbitmq-rbac.yaml

rabbitmq.yaml

---
apiVersion: v1
kind: Service
metadata:
   name: rabbitmq
   labels:
     app: rabbitmq
spec:
   ports:
      -  name: mangement
         protocol: TCP
         port: 15672
         targetPort: 15672
      -  name: amqp
         protocol: TCP
         port: 5672
         targetPort: 5672
      -  port: 15692
         protocol: TCP
         targetPort: 15692
         name: rabbitmq-prometheus
   selector:
      name: rabbitmq
#---
#apiVersion: v1
#kind: Service
#metadata:
#   name: rabbitmq-external
#spec:
#   ports:
#      - port: 5672
#        nodePort: 30672
#        name: rabbitmq-port
#   selector:
#      name: rabbitmq
#   type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
   name: rabbitmq-controller
   labels:
      name: rabbitmq
spec:
   serviceName: rabbitmq
   replicas: 1
   template:
      metadata:
         name: rabbitmq
         labels:
            name: rabbitmq
      spec:
         imagePullSecrets:
            - name: harbor-secret
         containers:
            #-  image: registry-vpc.cn-shenzhen.aliyuncs.com/wy_spc/rabbitmq:3.8.4-management-alpine
            -  image: harbor.ole12138.cn/wy_spc/rabbitmq:3.8.4-management-alpine
               name: rabbitmq
#               env:
#                  -  name: RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
#                     value: '-rabbitmq_management path_prefix "/rabbitmq"'
               ports:
                  -  containerPort: 5672
               resources:
                  requests:
                     cpu: 200m
                     memory: 1Gi
                  limits:
                     cpu: 500m
                     memory: 4Gi
               volumeMounts:
                  -  mountPath: /var/lib/rabbitmq
                     name: rabbitmq-data
         volumes:
            -  name: rabbitmq-data
               persistentVolumeClaim:
                  claimName: rabbitmq-nas-csi-pvc

   selector:
      matchLabels:
         name: rabbitmq

这里内存限制改大了一点,4G。

注意这里要从harbor私服中取镜像。需要准备存储harbor账号密码的一个secret

kubectl -n jtest create secret docker-registry harbor-secret --docker-server harbor.ole12138.cn --docker-username admin --docker-password Harbor12345 --docker-email 784319947@qq.com
kubectl apply -f ./rabbitmq.yaml

rabbitmq的web管理台配置

使用telepresence 在本地访问k8s中的服务。

kubectl config set-context --current --namespace jtest
telepresence connect

然后在浏览器访问k8s中rabbitmq服务地址

http://rabbitmq.jtest.svc.cluster.local:15672/

用账号guest密码guest登录

到admin/Users标签下

添加用户

用户 woyunsoft

密码 woyunsoft123

tag administrator

到admin/Virtual Hosts标签下

添加 virtual host

name为 /woyun_dev

到admin/Users标签下

点击用户 woyunsoft

设置permisssion

选择 virtual host: /woyun_dev

configure regexp为 .*

write regexp为 .*

read regexp为 .*

同理设置 topic permission

略。

nacos中调整rabbitmq配置

命名空间 jtest

Data Id: rabbitmq.properties

Group: woyun

rabbitmq.properties配置内容

# rabbitmq
#spring.rabbitmq.host=rabbitmq.rabbitmq.svc.cluster.local
spring.rabbitmq.host=rabbitmq.jtest.svc.cluster.local
spring.rabbitmq.port=5672
spring.rabbitmq.username=woyunsoft
spring.rabbitmq.password=woyunsoft123
spring.rabbitmq.virtualHost=/woyun_dev
spring.rabbitmq.publisherConfirms=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=3
#是否开启消费者重试(为false时关闭消费者重试,这时消费端代码异常会一直重复收到消息)
spring.rabbitmq.listener.simple.retry.enabled=true
#重试间隔时间(单位毫秒)
spring.rabbitmq.listener.simple.retry.initial-interval=5000
#重试次数超过上面的设置之后是否丢弃(false不丢弃时需要写相应代码将该消息加入死信队列)
spring.rabbitmq.listener.simple.default-requeue-rejected=false

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注