文档章节

nsq 问题

昏鸦
 昏鸦
发布于 2014/03/25 16:15
字数 181
阅读 115
收藏 0

在nsq 进行topic get的时候都会对map进行枷锁

func (n *NSQD) GetTopic(topicName string) *Topic {
    n.Lock()
    t, ok := n.topicMap[topicName]
    if ok {
        n.Unlock()
        return t
    } else {
        t = NewTopic(topicName, &Context{n})
        n.topicMap[topicName] = t

        log.Printf("TOPIC(%s): created", t.name)

        // release our global nsqd lock, and switch to a more granular topic lock while we init our
        // channels from lookupd. This blocks concurrent PutMessages to this topic.
        t.Lock()
        n.Unlock()
        // if using lookupd, make a blocking call to get the topics, and immediately create them.
        // this makes sure that any message received is buffered to the right channels
        if len(n.lookupPeers) > 0 {
            channelNames, _ := lookupd.GetLookupdTopicChannels(t.name, n.lookupHttpAddrs())
            for _, channelName := range channelNames {
                t.getOrCreateChannel(channelName)
            }
        }
        t.Unlock()

        // NOTE: I would prefer for this to only happen in topic.GetChannel() but we're special
        // casing the code above so that we can control the locks such that it is impossible
        // for a message to be written to a (new) topic while we're looking up channels
        // from lookupd...
        //
        // update messagePump state
        select {
        case t.channelUpdateChan <- 1:
        case <-t.exitChan:
        }
    }
    return t
}


© 著作权归作者所有

共有 人打赏支持
昏鸦
粉丝 7
博文 184
码字总数 59972
作品 0
程序员
私信 提问
NSQ 的 PHP 客户端 - php-nsq

php-nsq php-nsq 是nsq的php客户端,采用c扩展编写,性能和稳定性。 安装 : 请提前安装libevent Dependencies: libevent (apt-get install libevent-dev ,yum install libevent-devel) 1. s......

匿名
2018/06/21
0
0
How we redesigned the NSQ- 其他特性及未来计划

在系列文章前面几篇中,介绍了 NSQ 改造的过程和几个基础特性,本文中我们继续介绍几个高级特性及其使用场景,这些都是结合有赞业务场景总结提炼出来的重要功能。 NSQ 拓展消息格式的设计 有...

有赞技术
2018/03/30
0
0
NSQ:分布式的实时消息平台

NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版。 NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,...

hejunyi1204
2015/08/14
0
0
去中心化分布式服务实时消息平台-NSQ

NSQ是一个基于Go语言的开源的分布式实时消息平台 NSQ可用于大规模系统的实时消息服务,它的设计目标是为在分布式环境下提供一个强大的去除中心化的分布式服务架构,可以每天处理数以亿计的实...

kiwisoft
2016/10/27
22
0
nsq 使用笔记

nsqd 出现问题 https://github.com/nsqio/nsq/issues/691 https://github.com/nsqio/nsq/issues/506 nsqadmin 在访问的时候报错误 这个错误就是DNS访问出了问题。 解决方法: 使用 -broadca...

solate
2016/11/01
137
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云全站加速DCDN全面支持WebSocket协议

WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销、保持连接状态、更强实时性、更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议。为了更好的满足客户在实时通...

zhaowei121
9分钟前
0
0
cer格式证书怎么转换为pfx格式

1、准备工作:安装好openssl,将私钥key文件拷入openssl安装目录,准备cer格式证书。 2、以管理员权限运行cmd 3、进入openssl安装目录 4、输入以下命令: 会提示输入密码,保存好这个密码,安...

fang_faye
9分钟前
0
0
promise(then、catch、resolve、reject、race、all、done、finally)

https://blog.csdn.net/momDIY/article/details/77856099

Jack088
12分钟前
0
0
Linux(centos7)安装maven3.5

Linux(centos7)安装maven3.5 1.创建一个maven文件夹 [root@MiWiFi-R3-srv ~]# mkdir /usr/local/maven 1 2.上传apache-maven-3.5.0-bin.tar.gz到/usr/local/maven/目录下 链接: https://pan......

linjin200
19分钟前
0
0
Java 发送邮件实现(JavaMail 和 Spring 实现)

Java 实现邮件的发送,使用 JavaMail 和 Spring 实现 一、使用 JavaMail JavaMail 是 Java 处理电子邮件相关的编程接口,但是没有被加在标准的Java开发工具包中(Java Development Kit),所...

非摩尔根
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部