为了账号安全,请及时绑定邮箱和手机立即绑定

一个连接可以支持rabbitmq的go api中的多个通道吗?

一个连接可以支持rabbitmq的go api中的多个通道吗?

Go
杨魅力 2021-08-23 15:49:37
package mainimport ("fmt""github.com/streadway/amqp""time")// Every connection should declare the topology they expectfunc setup(url, queue string) (*amqp.Connection, *amqp.Channel, error) {    //setup connection    conn, err := amqp.Dial(url)    if err != nil {        return nil, nil, err    }    //build channel in the connection    ch, err := conn.Channel()        if err != nil {        return nil, nil, err    }    //queue declare    if _, err := ch.QueueDeclare(queue, false, true, false, false, nil); err != nil {        return nil, nil, err    }    return conn, ch, nil}func main() {    //amqp url    url := "amqp://guest:guest@127.0.0.1:5672";    for i := 1; i <= 2; i++ {        fmt.Println("connect ", i)        //two goroutine           go func() {            //queue name            queue := fmt.Sprintf("example.reconnect.%d", i)            //setup channel in the tcp connection            _, pub, err := setup(url, queue)            if err != nil {                fmt.Println("err publisher setup:", err)                return            }            // Purge the queue from the publisher side to establish initial state            if _, err := pub.QueuePurge(queue, false); err != nil {                fmt.Println("err purge:", err)                return            }            //publish msg            if err := pub.Publish("", queue, false, false, amqp.Publishing{                Body: []byte(fmt.Sprintf("%d", i)),            }); err != nil {                fmt.Println("err publish:", err)                return            }            //keep running            for{                time.Sleep(time.Second * 20)            }        }()    }    //keep running    for {        time.Sleep(time.Second * 20)    }}我以为程序和mq-server之间只有一个连接,但是有两个连接,一个连接只能支持一个通道,为什么?两个goroutine不能共享同一个tcp连接吗?理论上套接字描述符可以在一个进程的所有线程中共享。为什么两个 goroutine 不共享一个 socket 而是有自己的通道?手工模型:rabbitmq中的真实模型:
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信