ZBLOG

简单用go写一个分布式zeromq的发布订阅的例子

package main

import (

"fmt"
"github.com/pebbe/zmq4"
"sync"

)

func main() {

var wg sync.WaitGroup
context, _ := zmq4.NewContext()
defer context.Term()

// 创建发布者
publisher, _ := context.NewSocket(zmq4.PUB)
defer publisher.Close()
publisher.Bind("tcp://*:8888")

// 创建订阅者1
subscriber1, _ := context.NewSocket(zmq4.SUB)
defer subscriber1.Close()
subscriber1.Connect("tcp://localhost:8888")
subscriber1.SetSubscribe("")

// 创建订阅者2
subscriber2, _ := context.NewSocket(zmq4.SUB)
defer subscriber2.Close()
subscriber2.Connect("tcp://localhost:8888")
subscriber2.SetSubscribe("")

// 订阅者1接收消息
wg.Add(1)
go func() {
    for {
        msg, _ := subscriber1.RecvMessage(0)
        fmt.Printf("Subscriber1 received: %s\n", msg[0])
    }
    wg.Done()
}()

// 订阅者2接收消息
wg.Add(1)
go func() {
    for {
        msg, _ := subscriber2.RecvMessage(0)
        fmt.Printf("Subscriber2 received: %s\n", msg[0])
    }
    wg.Done()
}()

// 发布消息
publisher.Send("Hello from publisher!", 0)

wg.Wait()

}

在这个例子中,我们创建了一个 zeromq 的上下文(context),然后创建了一个发布者(publisher)和两个订阅者(subscriber1 和 subscriber2)。我们使用 Bind 和 Connect 方法将发布者和订阅者连接到相同的端点(endpoint)。在这个例子中,我们使用了 tcp 协议和 8888 端口。我们还使用了 SetSubscribe 方法来订阅所有消息。

在订阅者1和订阅者2中,我们使用了 RecvMessage 方法来接收消息,并打印出接收到的内容。在发布者中,我们使用 Send 方法来发送一条消息到订阅者。

最后,我们使用 sync.WaitGroup 来等待所有 goroutine 执行完毕。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1672

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?