go-nsq使用简述
一 环境依赖:
golang 开发环境(version >= 1.2) 下源码,配置环境变量,执行安装脚本
gpm 依赖包管理器 ubantu: sudo apt-get intall gpm
二 NSQ安装:
- git获取源码: mkdir -p $GOPATH/src/github.com/nsqio;cd $GOPATH/src/github.com/nsqio;git clone https://github.com/nsqio/nsq.git;cd nsq
- 安装依赖包: gpm install
- 安装NSQ: go install ./...
三 开启NSQ:
- nsqd节点维护进程:nsqlookupd &
- nsqd节点进程:nsqd --lookupd-tcp-address=127.0.0.1:4160 &
- 消息产看进程:nsqadmin --lookupd-http-address=127.0.0.1:4161 &
ps:nsqlookupd与nsqadmin为辅助进程,可不使用直接用nsqd也可正常工作.
这里开启的进程均用默认的端口
四 工具测试:
- curl -d 'hello world 1' 'http://127.0.0.1:4151/put?topic=test' // 产生一个topic为“test” 消息内容为“hello world”的消息
- nsq_to_file --topic=test --output-dir=./tmp --lookupd-http-address=127.0.0.1:4161 // 将topic为“test”的消息写到./tmp目录下的一个文件中
五 代码测试:
package main import (
"fmt"
"time" "github.com/nsqio/go-nsq"
) // nsq发布消息
func Producer() {
p, err := nsq.NewProducer("127.0.0.1:4150", nsq.NewConfig()) // 新建生产者
if err != nil {
panic(err)
}
if err := p.Publish("test", []byte("hello NSQ!!!")); err != nil { // 发布消息
panic(err)
}
} // nsq订阅消息
type ConsumerT struct{} func (*ConsumerT) HandleMessage(msg *nsq.Message) error {
fmt.Println(string(msg.Body))
return nil
} func Consumer() {
c, err := nsq.NewConsumer("test", "test-channel", nsq.NewConfig()) // 新建一个消费者
if err != nil {
panic(err)
}
c.AddHandler(&ConsumerT{}) // 添加消息处理
if err := c.ConnectToNSQD("127.0.0.1:4150"); err != nil { // 建立连接
panic(err)
}
}
// 主函数
func main() {
Producer()
Consumer()
time.Sleep(time.Second * )
}
// 运行将会打印: hello NSQ!!!
六 使用总结:
单机使用条件,同步发布消息速度也非常快(10w/s),发布消息端基本无需再做缓存封装。接收端的消息处理应耗时尽量的短,避免消息积累,当消息积累到NSQ的缓存的数量会将多余的消息写到文件,此时也会减缓发送端的发送速度,
因此,对接收端可使用channel和go routine做简单封装处理。若某topic消息产生太快太多也可将其单独使用一个nsqd处理,避免消息积累影响其它消息投递与接收。
go-nsq使用简述的更多相关文章
- 简述 OAuth 2.0 的运作流程
本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- Android网络定位服务定制简述
Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...
- 深入NSQ 之旅[转载]
介绍 NSQ是一个实时的分布式消息平台.它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架.这篇文章介绍了 基于go语言的NSQ的内部架构,它能够为高吞吐量的网络服务器带来 性能 ...
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- 简述ASP.NET MVC原理
1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
- 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...
- Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)
前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...
随机推荐
- UVaLive6039 Uva1668 Let's Go Green
一开始考虑所有边都是单独的一条路径 然后尽量多的合并 #include<cstdio> #include<cstring> #include<cstdlib> #i ...
- android 加载图片防止内存溢出
图片资源: private int fore[]; private int back[]; fore = new int[]{R.drawable.a0, R.drawable.a1, R.drawa ...
- (配置)CKEditor+CKFinder+php上传配置,根据年月命名创建文件夹来存放
CKEditor+CKFinder+php上传配置 新版本的CKEditor只提供了基本的文本编辑功能,上传模块由另一个组件CKFinder.这里主要记录CKFinder上传的一些参数配置,能够成功上 ...
- 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法
using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Stu ...
- Mate8的麒麟950怎么样? 4个问题待解决
今天下午,华为在上海发布了传闻已久的旗舰智能手机Mate 8.这款手机可以算是国产手机的佼佼者,不光在外观.功能等常规元素上达到旗舰级别,更有特色的是它采用了华为自行研发的手机SOC芯片麒麟950.目 ...
- iOS-iPad开发之popoverController使用介绍
iOS-iPad开发之popoverController使用介绍 iOS开发UI篇-popoverController使用注意 iOS SDK:自定义Popover(弹出窗口) 实现的简单例子: // ...
- Markdown写接口文档,自动添加TOC
上回说到,用Impress.js代替PPT来做项目展示.这回换Markdown来做接口文档好了.(不敢说代替Word,只能说个人感觉更为方便)当然,还要辅之以Git,来方便版本管理. Markdown ...
- Python:构建缓冲带提取区域平均坡度
前一段时间做提取坡度的问题,当时首先想到的是使用ArcEngine来做,因为记得有ITopoOperator接口可以构建缓冲带,用IExtractionRaster可以掩膜栅格数据,利用IPixelB ...
- HTTP协议基础与实验
一. HTTP协议(Hypetext Transfer Protoacal,超文本传输协议) HTTP协议规定了Web基本的运作过程,以及Web服务器之间的通信细节. Http协议采用客户端/服务器端 ...
- Axiom3D学习日记 2.介绍SceneManager,SceneNode,Entity
SceneManager(场景管理类) 所有出现在屏幕里的东西都受SceneManager管理(最好是这样),当你放置对象在场景里,SceneManager就会跟踪他们的位置,当你为场景创建一个相机, ...