2.7 no replication
不像其他的队列组件,NSQ并没有提供任何形式的复制和集群,也正是这点让它能够如此简单地运行,但它确实对于一些高保证性高可靠性的消息发布没有足够的保证 。我们可以通过降低文件同步的时间来部分避免,只需通过一个标志配置 , 通过EBS支持我们的队列 。但是这样仍然存在一个消息被发布后马上死亡,丢失了有效的写入的情况 。
2.8 没有严格的顺序
虽然Kafka由一个有序的日志构成 , 但NSQ不是 。消息可以在任何时间以任何顺序进入队列 。在我们使用的案例中,这通常没有关系 , 因为所有的数据都被加上了时间戳,但它并不适合需要严格顺序的情况 。
2.9 无数据重复删除功能
NSQ对于超时系统,它使用了心跳检测机制去测试消费者是否存活还是死亡 。很多原因会导致我们的consumer无法完成心跳检测 , 所以在consumer中必须有一个单独的步骤确保幂等性 。
3. 实践安装过程
本文将nsq集群具体的安装过程略去,大家可以自行参考,比较简单 。这部分介绍下笔者实验的拓扑,以及nsqadmin的相关信息 。
3.1 拓扑结构
topology
实验采用3台NSQD服务 , 2台LOOKUPD服务 。
采用官方推荐的拓扑,消息发布的服务和NSQD在一台主机 。一共5台机器 。
NSQ基本没有配置文件,配置通过命令行指定参数 。
主要命令如下:
LOOKUPD命令
NSQD命令
工具类,消费后存储到本地文件 。
发布一条消息
3.2 nsqadmin
对Streams的详细信息进行查看,包括NSQD节点,具体的channel,队列中的消息数 , 连接数等信息 。
nsqadmin
channel
列出所有的NSQD节点:
nodes
消息的统计:
msgs
lookup主机的列表:
hosts
4. 总结
NSQ基本核心就是简单性,是一个简单的队列 , 这意味着它很容易进行故障推理和很容易发现bug 。消费者可以自行处理故障事件而不会影响系统剩下的其余部分 。
事实上,简单性是我们决定使用NSQ的首要因素,这方便与我们的许多其他软件一起维护,通过引入队列使我们得到了堪称完美的表现,通过队列甚至让我们增加了几个数量级的吞吐量 。越来越多的consumer需要一套严格可靠性和顺序性保障,这已经超过了NSQ提供的简单功能 。
结合我们的业务系统来看 , 对于我们所需要传输的发票消息,相对比较敏感,无法容忍某个nsqd宕机,或者磁盘无法使用的情况,该节点堆积的消息无法找回 。这是我们没有选择该消息中间件的主要原因 。简单性和可靠性似乎并不能完全满足 。相比Kafka,ops肩负起更多负责的运营 。另一方面,它拥有一个可复制的、有序的日志可以提供给我们更好的服务 。但对于其他适合NSQ的consumer,它为我们服务的相当好 , 我们期待着继续巩固它的坚实的基础 。
golang 微服务开发(一)本项目旨在使用golang 搭建一个微服务应用 。
gin做api和rpc的客户端 go-micro作为后台微服务
···
// gin
Frame
- app// 控制器
- conf// 配置文件
- middleward// 中间件
- models// 模型
- routes// 路由
- services// 服务层
- uitl// 工具
- main.go// 入口
// app 目录
app
- api
- v1
- goods.go
- v2
- route.go
- app.go
//conf目录
conf
- config.ini
models
- models.go
services
- xxxService.go
util
- config.go
···
golang比java好,会取代java,你们认可吗?Go和java产生的背景和语言的定义不一样,比较他们的好坏没多大意义 , 适合就是最好的,当你去做一个大型的项目的时候,使用java能够更清晰地展示出你的业务 。自身提供了比较完善的库 。
推荐阅读
- 区块链事件真实经历,区块链的故事和事故
- mysql支持的子查询优化,在mysql中子查询是
- erp系统软件灌云多少钱,erp系统 多少钱
- 怎么升级mysql客户端 mysql55升级
- 小企业如何做好品牌的营销,小企业如何进行营销推广
- 超微服务器,超微服务器售后电话
- 华为是否能使用chatgpt,华为能使用carplay吗
- 怎么查看mysql锁 mysql 查锁
- json格式化html代码,json格式化什么意思