登录
首页 >  Golang >  Go问答

在 Golang 中如何使用 RabbitMQ 实现 Exchange 标头功能?

来源:stackoverflow

时间:2024-03-07 19:51:25 456浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《在 Golang 中如何使用 RabbitMQ 实现 Exchange 标头功能?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

目前我正在使用 RabbitMQ 和 Golang。我在 RabbitMQ 主页上开始了教程并创建了队列和交换。但我找不到任何解释如何在 Golang 中实现 Exchange 标头的教程。

重要的是我也想知道,如何将数据放入标题中,例如 ID 和名称?


正确答案


我假设您的意思是队列或交换的名称。您可以遍历列表,或者如果名称从未更改,则只需静态键入它。例如,我创建了 x 个基于 cpu 的队列,以便在串行时将数据并行发送到每个核心(每个队列在自己的线程上运行)。可能不是最好的方法,这是我的方法,并添加了显然不是内置的第三层,在队列中串行循环!

package main
    
    import (
        "log"
    
        "github.com/streadway/amqp"
    )
    
    var i int = 0
    var coreCount []string = make([]string, runtime.NumCPU())
   
 func main() {
        //Make a connection
        conn, _ := amqp.Dial("amqp://guest:guest@localhost:5672/")
        defer conn.Close()
    
        //Ccreate a channel
        ch, _ := conn.Channel()
        defer ch.Close()
    
        //Declare a queue
        q, err := ch.QueueDeclare(
            "hello", // Your Queue name is "hello" bound to the Default Exchange <------ q.Name is Defined here
            false,   // should the message be persistent? also queue will survive if the cluster gets reset
            false,   // autodelete if there's no consumers (like queues that have anonymous names, often used with fanout exchange)
            false,   // exclusive means I should get an error if any other consumer subsribes to this queue
            false,   // no-wait means I don't want RabbitMQ to wait if there's a queue successfully setup
            nil,     // arguments for more advanced configuration
        )
    
        //Publish a message
        body := "hello world"
        err = ch.Publish(
            "",     // exchange <--- change the header here
            q.Name, // routing key 
            false,  // mandatory
            false,  // immediate
            amqp.Publishing{
                ContentType: "text/plain",
                Body:        []byte(body),
            })
        log.Printf("Message: %s", body)
    
    }

q.name 是您要绑定的队列名称和通道。 "" : // exchange 是您的交换名称。当使用双引号时,它的名称是默认的,并将具有相同路由键的所有队列绑定到该交换。

查看 delcarequeue(arg),这是您更改队列名称的地方。 在发布(arg)中,您可以在其中更改 exchange 标头。您可以创建多个交换的列表并迭代该列表。

编辑您需要在发布商端阅读您的消息。

我有 5 个颜色队列设置。 如果消息是红色的,则进入红色队列,蓝色则进入蓝色队列。

因此,您的发布者需要读取每条消息,将字节类型转换为字符串,然后根据您的要求解析消息。假设您正在寻找红色消息。

您的发布商发现了一条红色消息,现在需要将其定向到红色队列。在这里,您可以根据所有队列名称的数组列表更新 declarequeue() 中的队列名称,并且消息中的颜色与队列名称相匹配,现在您可以在消息传入时更新标头消息。 p>

https://www.rabbitmq.com/tutorials/amqp-concepts.html

其中 images 是发布者,读取每条消息并定向到每个队列。

理论要掌握,实操不能落!以上关于《在 Golang 中如何使用 RabbitMQ 实现 Exchange 标头功能?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>