lishijian 2020-04-08
感谢分享原文-http://bjbsair.com/2020-04-03/tech-info/29908.html
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。AMQP:Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言灯条件的限制。AMQP具有如下的特性:
RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。
下面是RabbitMQ部署的定义代码,此代码由两部分组成,即RabbitMQ部署的部署以及其代理服务。镜像使用的是bitnami/rabbitmq:latest。通过NodePort模式对外暴露了15672和5672端口,并通过nfs文件系统对RabbitMQ的数据进行持久化。
#-------------定义RabbitMQ部署----------------- apiVersion: apps/v1beta2 kind: Deployment metadata: name: rabbit spec: replicas: 1 selector: matchLabels: app: rabbit strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: rabbit spec: containers: - image: bitnami/rabbitmq:latest imagePullPolicy: IfNotPresent name: rabbit ports: - containerPort: 15672 name: rabbit15672 protocol: TCP - containerPort: 5672 name: rabbit5672 protocol: TCP resources: {} volumeMounts: - mountPath: /bitnami name: rabbit-persistent-storage dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - name: rabbit-persistent-storage nfs: path: /home/nfs-share/rabbit server: 10.0.33.201 #-----------------定义rabbit的代理服务-------------- apiVersion: v1 kind: Service metadata: name: rabbit-service spec: ports: - name: rabbit15672 nodePort: 31199 port: 15672 protocol: TCP targetPort: 15672 - name: rabbit15672 nodePort: 305672 port: 5672 protocol: TCP targetPort: 5672 selector: app: rabbit type: NodePort
通过kubectl,执行下面的命令在Kubernetes集群中部署Oracle数据库。
$ kubectl create -f?rabbitmq.yaml --namespace=kube-public
在部署完成后,通过下面的命令可以查看RabbitMQ暴露的端口:
$ kubectl get svc?--namespace=kube-public
在浏览器中输入:http://10.0.33.203:31199/,访问部署好的RabbitMQ。在登录页面输入用户名和密码(此处初始user/bitnami),系统将会进入RabbitMQ的主页。
在部署时,可以通过设置下面的环境变量来改变容器的运行时: