为什么我最终替换掉了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 ...
随机推荐
- js中判断输入框是否为空(判断是一串空的字符串)
function ltrim(str) { if(str.length==0) return(str); else { var idx=0; while(str.charAt( ...
- 使用axis2开发webservices并打包到tomcat
1. 写service类 package com.datatrans.demo; public class HelloServiceNew { public String sayHelloNew(){ ...
- [转]hibernate三种状态详解
本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼ 分类: hibernate ...
- Selinux是什么?
在新的基于RHEL一般都自带了selinux,多数情况下我们把selinux禁用了,事实上既然RHEL要集成它,必然有他的优点和长处,我们通过下文来了解selinux,也许你会喜欢用上它. 英文原文来 ...
- IO之同步、异步、阻塞、非阻塞
Stevens在文章中一共比较了五种IO Model: blocking IO nonblocking IO IO multiplexing signal driven IO ...
- mysql用存储过程插入百万条数据, 及查询优化
查看所有存储过程: show procedure status; 查看详细存储过程 ptest: show create procedure ptest; 存储过程插入数据: create table ...
- JS实现标签页效果(配合css)不同标签下对应不同div
显示页面tab.jsp </ div ></ body > </ html > tab.css ul ,li { margin:0px; padding:0px ...
- linux命令学习7-jstat命令
最近维护的项目使用的是java开发的,所以对于jvm虚拟机相关的操作还是必须要了解的,就先从最基本的jstat来学习起来. 首先需要会的就是full gc的查看; 下面就从网上收集了一些工具介绍, 慢 ...
- iOS开发——刮奖
还是直接上代码,有什么问题的话,直接评论. 1.在YYTScratchView.h文件中 // // YYTScratchView.h // Demo-刮奖 // // Created by y ...
- 让DIV的滚动条自动滚动到最底部 - 4种方法
方法一:使用锚标记要滚动到的位置,然后通过click方法模拟点击滚动到锚所在位置 <script language="javascript1.2" type="te ...