• rabbitmq


    rabbitmq

    5672:消费者访问的 端口
    15672:web管理端口
    25672:集群状态通信端口

    使用epel源

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum install epel-release -y
    yum install -y rabbitmq-server

    修改HOSTS

    echo -e "192.168.10.201 rabbitmq1
    192.168.10.202 rabbitmq2
    192.168.10.203 rabbitmq3" >> /etc/hosts
    cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.10.201 rabbitmq1
    192.168.10.202 rabbitmq2
    192.168.10.203 rabbitmq3

    启动服务

    systemctl start rabbitmq-server

    开启web管理界面插件

    [root@rabbitmq1 ~]# rabbitmq-plugins enable rabbitmq_management
    The following plugins have been enabled:
      mochiweb
      webmachine
      rabbitmq_web_dispatch
      amqp_client
      rabbitmq_management_agent
      rabbitmq_management
    Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

    重启rabbitMQ服务

    systemctl restart rabbitmq-server 

    浏览器访问

    http://192.168.10.201:15672/#/
    用户名和密码均为guest

    部署 rabbitMQ 集群
    Rabbitmq 的集群是依赖于 erlang 的集群来工作的,所以必须先构建起 erlang 的集群环境。而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的,这个 cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是 400 的权限。所以必须保证各节点 cookie 保持一致,否则节点之间就无法通信。

    将各节点 cookie 保持一致
    cat /var/lib/rabbitmq/.erlang.cookie

    重启节点
    systemctl restart rabbitmq-server

    查看各 rabbitMQ 服务的集群状态
    当前是独立运行的

    [root@rabbitmq1 ~]# rabbitmqctl  cluster_status
    Cluster status of node rabbit@rabbitmq1 ...
    [{nodes,[{disc,[rabbit@rabbitmq1]}]},
     {running_nodes,[rabbit@rabbitmq1]},
     {cluster_name,<<"rabbit@rabbitmq1">>},
     {partitions,[]}]
    ...done.
    
    [root@rabbitmq2 ~]# rabbitmqctl  cluster_status
    Cluster status of node rabbit@rabbitmq2 ...
    [{nodes,[{disc,[rabbit@rabbitmq2]}]},
     {running_nodes,[rabbit@rabbitmq2]},
     {cluster_name,<<"rabbit@rabbitmq2">>},
     {partitions,[]}]
    ...done.
    
    [root@rabbitmq3 ~]# rabbitmqctl  cluster_status
    Cluster status of node rabbit@rabbitmq3 ...
    [{nodes,[{disc,[rabbit@rabbitmq3]}]},
     {running_nodes,[rabbit@rabbitmq3]},
     {cluster_name,<<"rabbit@rabbitmq3">>},
     {partitions,[]}]
    ...done.

    将 rabbitMQ 的节点添加到集群
    将rabbitmq2添加为内存节点

    #停止应程序
    [root@rabbitmq2 ~]# rabbitmqctl  stop_app
    Stopping node rabbit@rabbitmq2 ...
    ...done.
     #清空元数据
    [root@rabbitmq2 ~]# rabbitmqctl   reset
    Resetting node rabbit@rabbitmq2 ...
    ...done.
    #将此节点添加至rabbitmq1中,并成为内存节点,不加--ram默认是磁盘节点
    [root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1 --ram
    Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ...
    ...done.
    #启动应程序
    [root@rabbitmq2 ~]# rabbitmqctl  start_app
    Starting node rabbit@rabbitmq2 ...
    ...done.

    将rabbitmq3添加为磁盘节点

    rabbitmqctl  stop_app #停止应程序
    rabbitmqctl  reset #清空元数据
    rabbitmqctl  join_cluster rabbit@rabbitmq1#将rabbitmq1添加到集群当中,并成为磁盘节点,不加--ram默认是磁盘节点
    rabbitmqctl  start_app #启动应程序

    使用浏览器访问
    rabbitmq

    更改为镜像模式

    rabbitmqctl set_policy  ha-all "#"  '{"ha-mode":"all"}' #"#"为任意0个或多个即为所有,也可以使用"^test"匹配开头,还可以使用其他正则匹配
    [root@rabbitmq3 ~]# rabbitmqctl set_policy  ha-all "#"  '{"ha-mode":"all"}' #"#"
    Setting policy "ha-all" for pattern "#" to "{"ha-mode":"all"}" with priority "0" ...
    ...done.

    enter description here
    enter description here

    任意节点验证

    rabbitmqctl  list_queues

    安装 pika 模块
    epel源
    yum install python-pip
    pip install pika

    生产者代码

    [root@Final ~]# cat mq.py 
    #!/bin/env  python
    #coding:utf-8
    import  pika
    #用户名密码
    cert = pika.PlainCredentials("guest","guest")
    #连接到rabbitMQ服务器
    conn = pika.BlockingConnection(pika.ConnectionParameters("192.168.10.201",5672,"/",cert))
    #创建频道
    chanel = conn.channel()
    #声明消息队列,如果队列不存在就创建,存在就将消息在此队队列中创建,如果将消息发送到不存在的队列,则rabbitMQ会自动清除这些消息
    chanel.queue_declare(queue="test1")
    #exchange告诉消息去往的队列,routing_key是队列名,body是要传递的消息内容
    chanel.basic_publish(exchange="",
                 routing_key="test",
                         body="hello world!")
    print("开始队列")
    #消息写入完成,关闭连接
    conn.close()

    消费者代码

    [root@Final ~]# cat test.py 
    #!/bin/env  python
    #coding:utf-8
    import  pika
    #用户名
    cert = pika.PlainCredentials("guest","guest")
    #连接到服务器
    conn = pika.BlockingConnection(pika.ConnectionParameters("192.168.10.201",5672,"/",cert))
    #创建频道
    channel = conn.channel()
    #声明消息队列,如果不存在就创建
    channel.queue_declare(queue="test1")
    # 定义一个回调函数来处理,这边的回调函数就是将信息打印出来。
    def callback(ch,method,properties,body):
        print("[x] Received %r" % body)
    
    channel.basic_consume('test',callback,
                          auto_ack=False,
                          exclusive=False,
                          consumer_tag=None,
                          arguments=None)
    
    print(' [*] Waiting for messages. To exit press CTRL+C')
    # 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理。按ctrl+c退出。
    channel.start_consuming()

    执行结果
    rabbitmq

    rabbitmq
    rabbitmq

  • 相关阅读:
    HTML5 特性检测:Video Format(视频格式)
    HTML5中对script标签的规定与解释
    Java数据类型
    Java微信公众平台开发之将本地开发环境映射到公网访问
    微信扫码支付模式一和模式二的区别
    Java微信公众平台开发之获取地理位置
    Vim 的一些高频使用命令
    Python 的一些高级特性
    【面试题总结】第二篇
    Python 的模块和包
  • 原文地址:https://www.cnblogs.com/fina/p/11315585.html
Copyright © 2020-2023  润新知