go语言中间件原理 go mysql 中间件( 三 )


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,它为我们服务的相当好,我们期待着继续巩固它的坚实的基础 。
golangchannel和mq的区别golangchannel和mq的区别
我是一个着迷于产品和运营的技术人 , 乐于跨界的终身学习者 。欢迎关注我哟~
每周五12点 按时送达~
我的第「218」篇原创敬上
大家好 , 我是Z哥 。
最近在项目中遇到了一个使用 RabbitMQ 时的问题,这个问题我觉得还是有一定普适性的,和大家分享一下 , 避免大家后续在同一个问题上犯错 。
消息队列(MQ)是在软件开发中很常用的中间件 , 如果一个程序需要协调另一个程序进行数据的“write”操作 , 并且不关心“write”的结果,则便会选择它 。它是一个保存消息(数据)的容器 , 由它来确保消息一定被送达到目标程序 。
打个比喻来说,消息队列就是一个邮差 , 它负责将信件(消息)从源头送往目的地,并且根据信件重要性的不同,提供当面签收确认或者直接投放两种服务 。
RabbitMQ 就是一个典型的消息队列 , 以 AMQP 为标准 。历史也比较悠久 , 大概是从 2007年研发出来的,用的编程语言Erlang也同样具有年代感 。
需要简单介绍一下 Erlang 的特点 , 它对我们理解 RabbitMQ 有很大的帮助 。
Erlang 是一种运行于“虚拟机”(类似 JVM)的解释性语言 。是一个结构化 , 动态类型编程语言 , 内建并行计算支持 。使用 Erlang 编写出的应用运行时通常由成千上万个轻量级“进程”(并非传统意义上的进程)组成,并通过消息传递相互通讯 。进程间上下文切换对于 Erlang 来说仅仅 只是一两个环节 , 比起 C 程序的线程切换要高效得多得多了 。
——整理于百度百科的资料
不管是什么 MQ 中间件,作为消息的生产方和消费方都需要和 MQ 的服务端建立连接进行通讯 。

推荐阅读