为什么我最终替换掉了NATS
之前公司没有使用msmq/rebbitmq等消息队列,一方面是觉得太重,想避免在引入中间件。另外的原因是公司的业务并不需要消息持久化和确保可送达(at-least-once VS at-more-once)。所以在一番调研之后,选择了nats:(https://nats.io/)用它来当消息队列使用。
nats的优点:
1.使用简单:github(https://github.com/nats-io/gnatsd)上直接clone下源码 go build 即可。
2.无需多配置:client端只需知道nats的节点和约定好的subject名称即可
3.快!由于nats的特性,只发送不确认送达
4.有多种客户端支持,由于公司有.net和go的代码,所以需要可以跨语言的消息中间件
5.拥抱开源,我很喜欢
项目上线了半年,发现了如下问题:
1机房出现故障,导致nats server端需要重连,但是我们运维实践下来发现说进程需要手工重启
2还是nats timeout后,需要在reconnection里要重新初始化连接,不方便
3我们使用thrift作为消息编码,感觉编码后的消息臃肿,不如protobuf
4需求的变更,谁知道会不会改成消息不可以丢失呢。。
于是决定替换为consul+grpc
consule:解决的是服务健康监控和服务发现的问题,一样对外只暴露一个IP
grpc:天生使用http2+protobuf3,编码和传输上不逊于thrift,而且对于熟悉thrift的同学来说pb3点语法so easy
再也不用担心丢数据的问题了~
为什么我最终替换掉了NATS的更多相关文章
- 在notepad++里面使用正则表达式替换掉所有行逗号前面内容
		需求:在notepad++里面使用正则表达式替换掉所有行逗号前面内容,一文本内容如下(只贴一小部分,实际上N多): 级别,層級程序,程式插件,外掛程式鼠标,滑鼠打印,列印打开,開啟博客,部落格联系,聯 ... 
- 骚操作:不重启 JVM,如何替换掉已经加载的类?
		Java对象行为 java.lang.instrument.Instrumentation 直接操作字节码 BTrace Arthas 三生万物 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在 ... 
- handlebars.js 用 <br>替换掉 内容的换行符
		handlebars.js 用 <br>替换掉 内容的换行符 JS: Handlebars.registerHelper('breaklines', function(text) { te ... 
- Javascript中使用replace()方法+正则表达式替换掉所有字符
		Js中的replace方法,只能替换掉第一次匹配到的字符, 而我们经常需要替换一个字符串中所有的匹配字符,这时候可以用正则表达式: str.replace(/a/g,"b"); ... 
- Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架
		正如Spring官方文档所述,其底层的实现选择了commons-logging作为日志框架.这一"失足"性的选择,竟连Spring自身都抱怨.但是,谁叫Spring如此优秀呢,即使 ... 
- jersey 用FastJson替换掉默认的Jackson
		@Bean public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); ... 
- 【基本功】Java动态追踪技术探究  不重启JVM,替换掉已经加载的类?不重启JVM,获知运行时对象的属性
		https://mp.weixin.qq.com/s/_hSaI5yMvPTWxvFgl-UItA 小结: 1.根据Java的类加载机制,在同一个ClassLoader中,类是不允许重复的: 2.单例 ... 
- sqlserver查询的结果复制到excel替换掉回车换行
		从sqlserver查询统计出的结果复制到excel,如果有回车,换行 ,或回车换行 ,复制到excel显示会乱会错版,查询的时候就替换掉回车换行,复制出来就不会乱了 ) ), ),),'') fro ... 
- re表达式替换掉"\n\t\r”字符
		使用re来将一些字符替换掉,比如替换为空: import re s = "这是一个例子\n,我们的祖国" re.sub("[\n\t\r]", "&q ... 
随机推荐
- HTTP协议详解 转自小坦克
			-- 此文章是转载小坦克的;直接复制文章的目的是因为原文章地址经常被重置,找不到原来的文章.小坦克博客园主页:https://home.cnblogs.com/u/TankXiao/ 当今web程序的 ... 
- YouKu iOS笔试题一
			序言 最近收到某某同学将去youku的iOS笔试题的邮件,希望笔者能整理一下,并提供参考答案.笔者决定整理出来,并分享给大家.当然,与此同时,也想看看youku的笔试题到底有多难,也考考自己有多少料吧 ... 
- Jenkins启动、停止脚本
			1.jenkins下载地址:http://pan.baidu.com/s/1o79ZRzs 2.创建shell脚本,如:jenkins.sh #!/bin/bash pid=`ps -ef | gre ... 
- SecureCRT 密钥生成 SSH 使用密钥登陆 服务器
			1.首先“Tool”-“Create Public Key” 2. 选择RSA 模式 4. 创建短语密码 5. 密钥长度为1024 6. 选择标准的 key , 下面是生成的路径 二 . 配置 SS ... 
- xCode中如何安装旧的模拟器
			http://blog.csdn.net/cmengzhongren/article/details/50414493 这里给出如何把老版本的SDK加入到新的Xcode中的方法.其实很简单,就是将老版 ... 
- jQuery修改css属性
			jQuery CSS 操作jQuery 拥有三种用于 CSS 操作的重要函数:$(selector).css(name,value)$(selector).css({properties})$(sel ... 
- ZOJ 3331 Process the Tasks
			双塔DP. #include<cstdio> #include<cstring> #include<queue> #include<string> #i ... 
- MySql5.6设置慢查询
			---恢复内容开始--- 在my.cnf中 mysqld节点下 #开启慢查询 slow_query_log = ON #设置超时时间 slow_launch_time = 2 #记录日志 slow_q ... 
- UVa 10523 - Very Easy !!!
			题目大意:给你一个公式,直接按照式子计算就可以了,要用到大数. import java.io.*; import java.util.*; import java.math.*; class Main ... 
- highcharts设置Y轴范围及根据Y轴范围设置不同颜色
			yAxis : { title : { text : '数据' }, plotLines : [ { value : 0, width : 1, color : '#808080' } ], min: ... 
