zoukankan      html  css  js  c++  java
  • RabbitMQ

    RabbitMQ docker安装

    docker pull rabbitmq:3.7.7-management
    docker images // 查看所有镜像
    docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9  // 运行镜像到容器
    

    说明:
    -d 后台运行容器;
    --name 指定容器名;
    -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
    -v 映射目录或文件;
    --hostname  主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
    -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

    浏览器打开web界面:http://Server-IP:15672
    账号密码:admin/admin

    添加账号

    docker exec -i -t 3a bin/bash   // 进入容器
    rabbitmqctl add_user root 123456  // 添加账号
    rabbitmqctl set_permissions -p / root ".*" ".*" ".*"   // 赋予root用户所有权限
    rabbitmqctl set_user_tags root administrator  // 赋予root用户administrator角色
    rabbitmqctl list_users  // 查看用户
    

    golang代码示例

    生产者

    package main
    
    import (
    	"log"
    
    	"github.com/streadway/amqp"
    )
    
    func failOnError(err error, msg string) {
    	if err != nil {
    		log.Fatalf("%s: %s", msg, err)
    	}
    }
    
    func main() {
    	conn, err := amqp.Dial("amqp://admin:admin@localhost:5672/my_vhost")
    	failOnError(err, "Failed to connect to RabbitMQ")
    	defer conn.Close()
    
    	ch, err := conn.Channel()
    	failOnError(err, "Failed to open a channel")
    	defer ch.Close()
    
    	err = ch.ExchangeDeclare(
    		"aut_exchange", // name
    		"topic",          // type
    		true,             // durable
    		false,            // auto-deleted
    		false,            // internal
    		false,            // no-wait
    		nil,              // arguments
    	)
    	failOnError(err, "Failed to declare an exchange")
    
    	body := "bbbb"
    	routineKey := "aut.*"
    	err = ch.Publish(
    		"aut_exchange", // exchange
    		routineKey,       // routing key
    		false,            // mandatory
    		false,            // immediate
    		amqp.Publishing{
    			ContentType: "text/plain",
    			Body:        []byte(body),
    		})
    	failOnError(err, "Failed to publish a message")
    
    	log.Printf(" [x] Sent %s", body)
    }
    
    

    消费者

    package main
    
    import (
    	"log"
    
    	"github.com/streadway/amqp"
    )
    
    func failOnError(err error, msg string) {
    	if err != nil {
    		log.Fatalf("%s: %s", msg, err)
    	}
    }
    
    func main() {
    	conn, err := amqp.Dial("amqp://admin:admin@localhost:5672/my_vhost")
    	failOnError(err, "Failed to connect to RabbitMQ")
    	defer conn.Close()
    
    	ch, err := conn.Channel()
    	failOnError(err, "Failed to open a channel")
    	defer ch.Close()
    
    	err = ch.ExchangeDeclare(
    		"aut_exchange", // name
    		"topic",          // type
    		true,             // durable
    		false,            // auto-deleted
    		false,            // internal
    		false,            // no-wait
    		nil,              // arguments
    	)
    	failOnError(err, "Failed to declare an exchange")
    
    	q, err := ch.QueueDeclare(
    		"aut_queue", // name
    		false,         // durable
    		false,         // delete when unused
    		true,          // exclusive
    		false,         // no-wait
    		nil,           // arguments
    	)
    	failOnError(err, "Failed to declare a queue")
    	routineKey := "aut.*"
    	err = ch.QueueBind(
    		q.Name,           // queue name
    		routineKey,       // routing key
    		"aut_exchange", // exchange
    		false,
    		nil)
    	failOnError(err, "Failed to bind a queue")
    
    	msgs, err := ch.Consume(
    		q.Name,      // queue
    		"consumer1", // consumer
    		false,       // auto ack
    		false,       // exclusive
    		false,       // no local
    		false,       // no wait
    		nil,         // args
    	)
    	failOnError(err, "Failed to register a consumer")
    
    	forever := make(chan bool)
    
    	go func() {
    		for d := range msgs {
    			log.Printf(" [x] %s", d.Body)
    		}
    	}()
    
    	log.Printf(" [*] Waiting for logs. To exit press CTRL+C")
    	<-forever
    }
    
    

    相关连接

    RabbitMQ基本知识
    RabbitMQ官网
    RabbitMQ-golang实现

  • 相关阅读:
    css 如何隐藏滚动条
    点击元素之外隐藏
    css3 box-shadow
    video常用功能
    input依次输入密码
    响应式布局基础
    数据库
    面试题
    pandas
    Numpy
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/14251849.html
Copyright © 2011-2022 走看看