zoukankan      html  css  js  c++  java
  • 消息队列rabbitmq的安装和使用

    rabbitmq-server服务端


    安装erlang
      yum -y install erlang
    安装RabbitMQ
      yum -y install rabbitmq-server
    启动rabbitmq-server:
      systemctl start rabbitmq-server

    设置rabbitmq账号密码,以及角色权限设置

    # 设置新用户dong 密码1234
      sudo rabbitmqctl add_user dong 1234
    设置用户为administrator角色
      sudo rabbitmqctl set_user_tags dong administrator
    # 设置权限,允许对所有的队列都有权限
    对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:
    set_permissions [-p <vhostpath>] <user> <conf> <write> <read>

      sudo rabbitmqctl set_permissions -p "/" dong ".*" ".*" ".*"

    #重启服务生效设置
      systemctl restart rabbitmq-server

    rabbitmq相关命令:

    // 新建用户
    rabbitmqctl add_user {用户名} {密码}

    // 设置权限
    rabbitmqctl set_user_tags {用户名} {权限}

    // 查看用户列表
    rabbitmqctl list_users

    // 为用户授权
    添加 Virtual Hosts :
    rabbitmqctl add_vhost <vhost>

    // 删除用户
    rabbitmqctl delete_user Username

    // 修改用户的密码
    rabbitmqctl change_password Username Newpassword

    // 删除 Virtual Hosts :
    rabbitmqctl delete_vhost <vhost>

    // 添加 Users :
    rabbitmqctl add_user <username> <password>
    rabbitmqctl set_user_tags <username> <tag> ...
    rabbitmqctl set_permissions [-p <vhost>] <user> <conf> <write> <read>

    // 删除 Users :
    delete_user <username>

    // 使用户user1具有vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
    rabbitmqctl set_permissions -p vhost1 user1 '.*' '.*' '.*'

    // 查看权限
    rabbitmqctl list_user_permissions user1

    rabbitmqctl list_permissions -p vhost1

    // 清除权限
    rabbitmqctl clear_permissions [-p VHostPath] User

    //清空队列步骤
    rabbitmqctl reset
    需要提前关闭应用rabbitmqctl stop_app ,
    然后再清空队列,启动应用
    rabbitmqctl start_app
    此时查看队列rabbitmqctl list_queues

    查看所有的exchange: rabbitmqctl list_exchanges
    查看所有的queue: rabbitmqctl list_queues
    查看所有的用户: rabbitmqctl list_users
    查看所有的绑定(exchange和queue的绑定信息): rabbitmqctl list_bindings
    查看消息确认信息:
    rabbitmqctl list_queues name messages_ready messages_unacknowledged
    查看RabbitMQ状态,包括版本号等信息:rabbitmqctl status

    #开启web界面rabbitmq
    rabbitmq-plugins enable rabbitmq_management

    #访问web界面
    http://ip(或者网址):15672/

    现在就可以在web页面,查看管理服务端信息了!!

    接下来为消息队列创建生产者消费者模型:

    安装pika模块:

      pip3 install pika

    书写生产者python代码:

     1 #!/usr/bin/env python
     2 import pika
     3 
     4 # 创建凭证,使用rabbitmq用户密码登录
     5 credentials = pika.PlainCredentials("dong", "1234")
     6 # 新建连接,这里localhost可以更换为服务器ip
     7 connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.168.129', credentials=credentials))
     8 # 创建一个链接
     9 channel = connection.channel()
    10 # 声明一个队列,用于接收消息。durable=True是声明一个持久化的队列不需要可以不指定
    11 channel.queue_declare(queue='test', durable=True)    
    12 # 注意在rabbitmq中,消息想要发送给队列,必须经过交换(exchange),初学可以使用空字符串交换(exchange=''),它允许我们精确的指定发送给哪个队列(routing_key=''),参数body值发送的数据
    13 
    14 while 1:
    15 
    16     message = input('请输入消息:')
    17     if message.upper() == 'Q':
    18         break
    19     channel.basic_publish(exchange='',
    20                           routing_key='test',
    21                           body=message,
    22                           properties=pika.BasicProperties(
    23                               delivery_mode=2,  # 代表消息是持久的,非持久消息无需指定properties
    24                           ))
    25     print("消息已发出")
    26 # 程序退出前,确保刷新网络缓冲以及消息发送给rabbitmq,需要关闭本次连接
    27 connection.close()

    书写消费者python代码:

     1 import pika
     2 
     3 # 建立与rabbitmq的连接
     4 credentials = pika.PlainCredentials("dong", "1234")
     5 connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.168.129', credentials=credentials))
     6 channel = connection.channel()
     7 channel.queue_declare(queue="test",durable=True)  # 队列不是持久化的,不需要durable参数,默认Flase
     8 
     9 
    10 def callbak(channel, method, properties, body):
    11     print("接收到了消息:%r" % body.decode("utf8"))
    12 
    13 
    14 # 有消息来临,立即执行callbak,没有消息则夯住,等待消息
    15 channel.basic_consume(queue="test", on_message_callback=callbak, auto_ack=True,)
    16 # auto_ack回复
    17 # 开始消费,接收消息
    18 channel.start_consuming()

    这样,一个RabbitMQ的生产者消费者,消息队列模型就完成了。。如果需要队列和消息是持久化的。。只需要指定生产者和消费者的:

      channel.queue_declare(queue="test",durable=True)中durable为True

    以及,生产者的:

      properties=pika.BasicProperties(delivery_mode=2,) #这个参数

  • 相关阅读:
    [bzoj1280]卖猪
    [51nod1237]最大公约数之和V3
    [cf741C]Arpa’s overnight party and Mehrdad’s silent entering
    [bzoj1576]安全路径
    [bzoj1143]祭祀
    db_writer_processes默认大小
    oracle审计功能启动关闭
    db_writer_processes默认大小
    手机发博客
    第27课 .net程序破解
  • 原文地址:https://www.cnblogs.com/NoteBook3013/p/10864787.html
Copyright © 2011-2022 走看看