golang 中操作nsq队列数据库
首先先在本地将服务跑起来,我用的是docker-compose ,一句话6666
- 先新建一个docker-compose.yml
- version: '2'
- services:
- nsqlookupd:
- image: nsqio/nsq
- command: /nsqlookupd
- ports:
- - "192.168.9.111:4160:4160"
- - "192.168.9.111:4161:4161"
- nsqd:
- image: nsqio/nsq
- command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
- depends_on:
- - nsqlookupd
- ports:
- - "192.168.9.111:4150:4150"
- - "192.168.9.111:4151:4151"
- nsqadmin:
- image: nsqio/nsq
- command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
- depends_on:
- - nsqlookupd
- ports:
- - "192.168.9.111:4171:4171"
然后整个数据就跑起来了
写个生产消息的
- tproducter.go
- package main
- import(
- "log"
- "github.com/nsqio/go-nsq"
- "encoding/json"
- "strconv"
- )
- type Person struct {
- Id int
- Name string
- Age int
- NickName string
- }
- func main() {
- config :=nsq.NewConfig()
- w,err :=nsq.NewProducer("192.168.9.111:4150",config)
- if err !=nil {
- log.Panic("Could not create producer.")
- }
- defer w.Stop()
- for i :=0;i<100;i++{
- p :=&Person{}
- p.Id = i
- p.Name = "Jack"+strconv.Itoa(i)
- p.NickName="Luo"+strconv.Itoa(i)
- p.Age = i
- info,jerr :=json.Marshal(p)
- err :=w.Publish("write_test",info)
- if err !=nil || jerr !=nil {
- log.Panic("Could not connect.")
- }
- }
- w.Stop()
- }
再写个消费的
- tconsumer.go
- package main
- import (
- "log"
- "github.com/nsqio/go-nsq"
- "time"
- )
- func main() {
- config :=nsq.NewConfig()
- q,err := nsq.NewConsumer("write_test","ch",config)
- if err !=nil{
- log.Panic("Could not create consumer.")
- }
- defer q.Stop()
- q.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error{
- log.Printf("Got a message: %v",string(message.Body))
- time.Sleep(5*time.Second)
- return nil
- }))
- //err = q.ConnectToNSQD("192.168.9.111:32771");
- err = q.ConnectToNSQD("192.168.9.111:4150");
- if err !=nil {
- log.Panic("Could not connect")
- }
- time.Sleep(3600*time.Second)
- }
然后就要以6起来了
- /usr/local/go/bin/go run /Users/jackluo/Works/golang/src/nsq/tconsumer.go
- 2017/08/29 15:29:45 INF 1 [write_test/ch] (192.168.9.111:4150) connecting to nsqd
- 2017/08/29 15:29:45 Got a message: {"Id":0,"Name":"Jack0","Age":0,"NickName":"Luo0"}
- 2017/08/29 15:29:50 Got a message: {"Id":1,"Name":"Jack1","Age":1,"NickName":"Luo1"}
- 2017/08/29 15:29:55 Got a message: {"Id":2,"Name":"Jack2","Age":2,"NickName":"Luo2"}
- 2017/08/29 15:30:00 Got a message: {"Id":3,"Name":"Jack3","Age":3,"NickName":"Luo3"}
- 2017/08/29 15:30:05 Got a message: {"Id":4,"Name":"Jack4","Age":4,"NickName":"Luo4"}
- 2017/08/29 15:30:10 Got a message: {"Id":5,"Name":"Jack5","Age":5,"NickName":"Luo5"}
- 2017/08/29 15:30:15 Got a message: {"Id":6,"Name":"Jack6","Age":6,"NickName":"Luo6"}
- 2017/08/29 15:30:20 Got a message: {"Id":7,"Name":"Jack7","Age":7,"NickName":"Luo7"}
- 2017/08/29 15:30:25 Got a message: {"Id":8,"Name":"Jack8","Age":8,"NickName":"Luo8"}
- 2017/08/29 15:30:30 Got a message: {"Id":9,"Name":"Jack9","Age":9,"NickName":"Luo9"}
- 2017/08/29 15:30:35 Got a message: {"Id":10,"Name":"Jack10","Age":10,"NickName":"Luo10"}
- 2017/08/29 15:30:40 Got a message: {"Id":11,"Name":"Jack11","Age":11,"NickName":"Luo11"}
- 2017/08/29 15:30:45 Got a message: {"Id":12,"Name":"Jack12","Age":12,"NickName":"Luo12"}
可以通过这个地址看得到界面http://192.168.9.111:4171/counter
golang 中操作nsq队列数据库的更多相关文章
- Golang 中操作 Mongo Update 的方法
Golang 和 MongoDB 中的 ISODate 时间交互问题 2018年02月27日 11:28:43 独一无二的小个性 阅读数:357 标签: GolangMongoDB时间交互时间转换 更 ...
- sql server 如何在一个数据库中操作另一个数据库中的数据
INSERT INTO T1 SELECT * FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=Serve ...
- 谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert
反应式编程在客户端编程当中的应用相当广泛,而当前在服务端中的应用相对被提及较少.本篇将介绍如何在服务端编程中应用响应时编程来改进数据库操作的性能. 开篇就是结论 接续上一篇<谈反应式编程在服务端 ...
- 在Golang中如何正确地使用database/sql包访问数据库
本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结. 其实我也是一个新手,机缘巧合 ...
- Golang中如何正确的使用sarama包操作Kafka?
Golang中如何正确的使用sarama包操作Kafka? 一.背景 在一些业务系统中,模块之间通过引入Kafka解藕,拿IM举例(图来源): 用户A给B发送消息,msg_gateway收到消息后,投 ...
- 数据库中操作XML(openXML)
最近公司项目需要在数据库中操作XML,因此系统的学习了一下 一.openxml的格式 OPENXML( idoc int [ in] , XPathnvarchar [ in ] , [ flags ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- 在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作
在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5 , mysq驱动jar包为mysql-connector ...
- 【mybatis】service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据【事务的问题】
问题描述: service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据 ...
随机推荐
- Linker Scripts3--简单的链接脚本命令2-Assigning Values to Symbols
1.前言 本章继续讲述简单脚本命令的后半部分 2.Assigning Values to Symbols 你可以给一个符号(symbol)赋值,它会把这些定义的符号放入全局符号表(symbols ta ...
- 一个漂亮的php验证码类
一个漂亮的php验证码类(分享) 作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下 直接上代码: 复制代码 代码如下: //验证 ...
- aix装python
网址是:http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html 在AIX下安装python Python是个 ...
- C# List 作为参数传递的值变化
一.示例演示 namespace TestConsole { class Program { static void Main(string[] args) { Console.WriteLine(& ...
- oracle11g自动内存管理
Oracle一直不停的在为Orace数据库的自动化管理努力着,11G中的自动内存管理是Oracle数据库中又一新的里程碑,通过新参数MEMORY_TARGET 来代替PGA和SGA的配置,ORACLE ...
- $.each() 与 $(selector).each()的区别
$.each( dataArr,function(i,item){}) 可用于遍历任何的集合(无论是数组或对象). 如果是数组,回调函数每次传入数组的索引(也就是i)和对应的值(item)(值亦可以 ...
- 缓存系列之二:CDN与其他层面缓存
缓存系列之二:CDN与其他层面缓存 一:内容分发网络(Content Delivery Network),通过将服务内容分发至全网加速节点,利用全球调度系统使用户能够就近获取,有效降低访问延迟,提升服 ...
- linux 查看nginx如何启动
执行命令: ps -A | grep nginx如果返回结果的话,说明有nginx在运行,服务已经启动
- 【进阶3-2期】JavaScript深入之重新认识箭头函数的this(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/21 上篇文章详细的分析了各种this的情况,看过之后对this的概 ...
- -Dmaven.multiModuleProjectDirectory system property is not set.
1.配置 maven 环境变量 新建系统变量 -> 变量名(N): M2_HOME 变量值(V): D:\apache-maven-3.5.4(改为自己的maven目录) -> 添加 pa ...