• rabbitmq 工作模式


    package main
    
    import (
        "fmt"
        "github.com/streadway/amqp"
        "log"
        "time"
    )
    
    func failOnError(err error, msg string) {
        if err != nil {
            log.Fatalf("%s: %s", msg, err)
        }
    }
    
    func xiaofei(name string) {
        dial, err := amqp.Dial("amqp://guest:guest@192.168.1.187:5673/")
        failOnError(err, "链接失败")
        channel, err := dial.Channel()
        failOnError(err, "channel链接失败")
        defer channel.Close()
        declare, err := channel.QueueDeclare(
            "task_queue",
            true,
            false,
            false,
            false,
            nil,
        )
    
        failOnError(err, "Failed to declare a queue")
    
        err = channel.Qos(
            1,     // prefetch count
            0,     // prefetch size
            false, // global
        )
        failOnError(err, "Failed to set QoS")
        msgs, err := channel.Consume(
            declare.Name, // queue
            "",           // 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 {
                fmt.Println("内容", string(d.Body), "协成", name)
                d.Ack(false)
            }
        }()
        <-forever
    }
    
    // channel 练习
    func main() {
        go xiaofei("1")
        go xiaofei("2")
        dial, err := amqp.Dial("amqp://guest:guest@192.168.1.187:5673/")
        failOnError(err, "链接失败")
        channel, err := dial.Channel()
        failOnError(err, "channel链接失败")
        defer channel.Close()
        declare, err := channel.QueueDeclare(
            "task_queue",
            true,
            false,
            false,
            false,
            nil,
        )
        failOnError(err, "创建队列错误")
        for i := 0; i < 50; i++ {
            body := fmt.Sprintln("信息", i)
            channel.Publish("", declare.Name, false, false, amqp.Publishing{DeliveryMode: amqp.Persistent, ContentType: "text/plain", Body: []byte(body)})
            failOnError(err, "Failed to publish a message")
        }
    
        time.Sleep(10 * time.Second)
    }
  • 相关阅读:
    05 drf源码剖析之认证
    04 drf源码剖析之版本
    03 drf源码剖析之视图
    02 drf源码剖析之快速了解drf
    OA之为用户设置角色和为用户设置权限
    EasyUI之datagrid的使用
    C#之反射
    EasyUI之Layout布局和Tabs页签的使用
    Memcached的使用
    Log4Net的简单使用
  • 原文地址:https://www.cnblogs.com/chengfengchi/p/16359193.html
Copyright © 2020-2023  润新知