Contents
调整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
发表回复