以下是使用 Golang 和 RabbitMQ 库建立一个连接,并通过协程建立多个通道的示例代码:

package main

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

const (
	uri = "amqp://guest:guest@localhost:5672/"
)

func main() {
	conn, err := amqp.Dial(uri)
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	// 创建多个协程并建立多个通道
	for i := 1; i <= 5; i++ {
		go func(i int) {
			channel, err := conn.Channel()
			if err != nil {
				panic(err)
			}
			defer channel.Close()

			queueName := fmt.Sprintf("queue%d", i)
			queue, err := channel.QueueDeclare(queueName, true, false, false, false, nil)
			if err != nil {
				panic(err)
			}

			for {
				message := fmt.Sprintf("Message from queue %s, time: %s", queueName, time.Now().Format("2006-01-02 15:04:05"))
				err = channel.Publish("", queue.Name, false, false, amqp.Publishing{
					ContentType: "text/plain",
					Body:        []byte(message),
				})
				if err != nil {
					panic(err)
				}
				fmt.Println(message)
				time.Sleep(time.Second)
			}
		}(i)
	}

	// 永久运行主线程,防止程序提前退出
	select {}
}

这段代码使用 amqp 库连接到本地的 RabbitMQ 服务,并创建了 5 个协程和通道。每个协程都会创建一个队列,并且向该队列发送消息。消息包含队列名称和当前时间,以便在控制台输出时进行区分。每个协程都会在发送完一条消息后等待 1 秒钟,然后再次发送消息。

在主线程中,使用 select{} 使程序永久运行,以防止程序在协程运行时提前退出。

Golang RabbitMQ: 使用协程建立多个通道 | 示例代码

原文地址: https://www.cveoy.top/t/topic/lAey 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录