安装使用

安装erlang

image-20210708230916192.png

安装RabbitMQ首先需要安装erlang环境,根据GitHub上erlang中README配置yum源

image-20210708231208011.png

将上面的内容写入红线标注的文件中保存退出,然后安装erlang

yum update -y
yum install -y erlang-23.3.4

安装RabbitMQ

下载完成RabbitMQ的安装包后执行下面的命令安装

yum install rabbitmq-server-3.8.19-1.el7.noarch.rpm

安装完成后可以看到有6个相关的可执行程序

image-20210708231658622.png

其中核心是rabbitmq-server

RabbitMQ的使用

启动

rabbitmq-server start & # 后台启动

启动RabbitMQ图形化管理界面

RabbitMQ的图形化管理界面模式是没有打开的,需要我们手动去打开,rabbitmq-plugins就是管理各种插件的工具

rabbitmq-plugins list # 查看所有插件
rabbitmq-plugins enable rabbitmq_management # 打开图形化界面
rabbitmq-plugins disable rabbitmq_management # 关闭图形化界面

访问图形化管理界面

打开图形化管理界面插件后就可以通过本机浏览器访问RabbitMQ了:http://127.0.0.1:15672/ 用户名和密码都是guest

如果要在其他机器上访问该界面则需要配置用户名和密码,权限等

rabbitmqctl add_user Guest Guest # 添加用户
rabbitmqctl set_user_tags Guest administrator # 赋予该用户管理员角色
rabbitmqctl set_permissions -p / Guest ".*" ".*" ".*" # 给该用户赋予权限

这样就可以在其他机器上访问RabbitMQ的管理界面了

下面通过Go语言实现一个简单的消息队列的应用

consumer.go

package main

import (
   "fmt"
   "github.com/streadway/amqp"
)

//消费者

func main() {
   //1.建立连接
   connection, err := amqp.Dial("amqp://Guest:Guest@192.168.27.139:5672")
   if err != nil {
      panic(err)
   }
   defer connection.Close()
   //2.设置通道
   ch, err := connection.Channel()
   if err != nil {
      panic(err)
   }
   //3.定义exchange
   //err = ch.ExchangeDeclare("exchange-name", "direct", false, false, false, false, nil)
   err = ch.ExchangeDeclare("exchange-name-topic", "topic", false, false, false, false, nil)
   if err != nil {
      panic(err)
   }
   //4.定义队列 queue
   queue, err := ch.QueueDeclare("", false, false,false,false, nil)
   if err != nil {
      panic(err)
   }
   //5.绑定 bind
   //err = ch.QueueBind(queue.Name, "direct_key", "exchange-name", false, nil)
   //topic 模糊匹配
   err = ch.QueueBind(queue.Name, "topic.#", "exchange-name-topic", false, nil)
   if err != nil {
      panic(err)
   }
   //6.接收消息
   consume_msg, err := ch.Consume(queue.Name, "", false, false, false, false, nil)
   if err != nil {
      panic(err)
   }
   //7.打印消息
   //msg := <-consume_msg
   //fmt.Printf("received msg: %s\n", msg.Body)
   for msg := range consume_msg {
      fmt.Printf("received msg: %s\n", msg.Body)
   }
}

producer.go

package main

import "github.com/streadway/amqp"

//生产者

func main() {
   //1.建立连接
   connection, err := amqp.Dial("amqp://Guest:Guest@192.168.27.139:5672")
   if err != nil {
      panic(err)
   }
   defer connection.Close()
   //2.设置通道
   ch, err := connection.Channel()
   if err != nil {
      panic(err)
   }
   //3.定义exchange
   //err = ch.ExchangeDeclare("exchange-name", "direct", false, false, false, false, nil)
   err = ch.ExchangeDeclare("exchange-name-topic", "topic", false, false, false, false, nil)
   if err != nil {
      panic(err)
   }
   //4.定义队列 queue
   //queue, err := ch.QueueDeclare("", false, false,false,false, nil)
   //if err != nil {
   // panic(err)
   //}
   //5.绑定 bind
   //6.定义发布的消息
   //msg := "hello"
   //7.发布消息
   //err = ch.Publish("exchange-name", "direct_key", false, false, amqp.Publishing{Body: []byte(msg)})
   err = ch.Publish("exchange-name-topic", "topic.first", false, false, amqp.Publishing{Body: []byte("topic1")})
   err = ch.Publish("exchange-name-topic", "TOPIC.eg", false, false, amqp.Publishing{Body: []byte("topic-eg")})
   err = ch.Publish("exchange-name-topic", "topic.last", false, false, amqp.Publishing{Body: []byte("topic2")})
   if err != nil {
      panic(err)
   }
}

Yuan_sr
18 声望6 粉丝