golang rabbitmq实践(啰嗦)
目录
1:背景简介
我是一个.net一线开发,今年6月份离开帝都来到魔都,后入职于莫江互联网在线教育公司。现刚刚转正,在这短短的三个月的时间,莫江给我的是职业路上颠覆性变化。
.net技术迷 => nodejs/java/golang
在此之前,我认为我会在.net平台坚定不移的走下,因为我是如此的喜欢C#语言,认为它是那么优美简介,vs ide号称宇宙神器,coding如此happy,but 当我们每周技术讨论例会上,我才真正的认识到我自己原来就是井底之蛙
2:C#和其他我所接触的语言对比
网上关于C#和java的大战从未停止,我也经常想起大约6年前我上大学的时候,某些无良的培训机构去我们系招人的时候,大量的贬低C#的时候,我在据理力争。然而时间在变,以我这3月多月接触其他语言的同时,也在反思,c#/.net真的有如此之好吗?
以下仅代表个人观点,如有不对欢迎来喷。
C#的优势: 神一般的IDE,大量的语法糖,强类型语言支持var声明,良好的错误输出和debug,天生的windows平台支持,兼容性良好的第三方或微软框架,代码提示、跳转、可阅读...
劣势:开源框架太少,跨平台费劲,语法冗余,依赖.net framework,执行效率堪忧
3:浅谈java
java语言本身和C#语言80%类型,学起来很轻松,可真的去写java代码的时候,就会感觉完全从天堂掉进了地狱。
ide难用,不管是eclipse 还是 IntelliJ IDEA ,太痛苦了
代码提示功能能用,但不强大,调试功能一般,写属性不习惯,没有C#语法糖,依赖jvm
这些都不足以让人感觉在地狱行走,最难的是。。。。 使用框架。 由于是自学,没人教,视频、贴吧、blog 跟着别人做依然搞不通,框架太多,兼容性却不怎么好。一度怀疑自己怀疑人生
可是虽然java的框架我不会配置,但我不会否定,java就是那么牛逼,只是我笨,不会用,如山如海的开源项目,让任何一个.net程序员目瞪口呆。
4:再试nodejs
nodejs呢也是在我们架构会上才知道的(以前的知识面好浅薄。。。),不看不知道,一看吓一跳啊,没想到JavaScript语言也能做后端了,还可以达到这么高的并发。ok then 学习之~
nodejs学习简单(web开发人员都会把~),配置简单(npm),依赖少,框架非常非常多,编写web服务器简单,执行效率不错,高并发处理很好...
最直观的,搞一个web站点,秒刷有木有,按着F5不放刷刷的有木有。好吧原谅我没见过世面,和asp.net 对比一下,觉得弱爆了有木有,不需要经过asp.net管道,不需要asp.net页面生命周期,不需要mvc控制流程。。。不需要,所有都自己写,想怎么写怎么写
异步回调,单线程处理,很吊很新颖。缺点也很明显,同步执行困难,代码检错麻烦,调试不友好,单线程,做cpu运算可能会造成异步无法回调...
5:go go
学习golang语言是如此的痛苦,类C的语法,不完全的面向对象,每次要检查的错误机制,指针(高级语言里面没有用过),环境配置死麻烦,初学很难理解语法。。。
我曾发过一句牢骚,写半个小时的golang简直比写一上午的C#都累
然而并不能打消我的激情,因为它的优势太明显了, 比C语法简单却有堪比C的性能,去除了面向对象复杂的语法和限制,使用指针可以根据自己需要操作内存或引用,优美的协程,不需要锁...
6:再啰嗦
写了这么多,或许有很多地方是不对的是片面的,我也会慢慢完善自己
7;为什么是rabbitmq
最近准备开发一个消息型项目,预计的是一天的消息量达到百万级别,近实时的到达率,最后确定下来确定为采用rabbitmq做消息中转,确保api到sql层数据并发量控制以及防丢失。 本来说打算用windows server来做,可是呢windows server有个缺陷却无法处理,就是它会假死,而且很难去监控,so 我想能不能这层使用golang 来写服务。 结果技术评审下来,因有较大的风险,暂时不采用,可以做一个辅助进程来跑。 我也希望我手里的现有项目能使用go来处理,比如apppush
这些项目都是用的rabbitmq做消息分发,之前的分发客户端是用C#写的,那个人已经离职,所以我决定用go写一个
8:时间
因没有用过rabbitmq,也不知道会有什么的结果,花多少精力。因非工作内容,也不会占用工作的时间,so 完成时间也是不确定的。博客园我应该是一周回更新一次或两次进度,仅做为此次行程的记录
9:目标
我希望我写完的项目,能提供一套完整的稳定的rabbitmq 调度系统的 golang驱动
begin!~~~~~
golang rabbitmq实践(啰嗦)的更多相关文章
- golang rabbitmq实践 (二 实现简单的消息收发)
1:驱动 本来打算自己写一个驱动的,后来发现github上面已经有了,那我就直接拿现成的了, 驱动采用 github.com/streadway/amqp ,直接import就可以啦! 2:excha ...
- golang rabbitmq实践 (一 rabbitmq配置)
1:环境选择 系统为ubuntu 15.04 ,我装在虚拟机里面的 2:rabbitmq tabbitmq 3.5.4 download url : http://www.rabbitmq.com/ ...
- Golang Gin实践 番外 请入门 Makefile
Golang Gin实践 番外 请入门 Makefile 原文地址:Golang Gin实践 番外 请入门 Makefile 前言 含一定复杂度的软件工程,基本上都是先编译 A,再依赖 B,再编译 C ...
- Golang 高效实践之并发实践
前言 在我前面一篇文章Golang受欢迎的原因中已经提到,Golang是在语言层面(runtime)就支持了并发模型.那么作为编程人员,我们在实践Golang的并发编程时,又有什么需要注意的点呢?下面 ...
- Golang 高效实践之并发实践context篇
前言 在上篇Golang高效实践之并发实践channel篇中我给大家介绍了Golang并发模型,详细的介绍了channel的用法,和用select管理channel.比如说我们可以用channel来控 ...
- Golang高效实践之泛谈篇
前言 我博客之前的Golang高效实践系列博客中已经系统的介绍了Golang的一些高效实践建议,例如: <Golang高效实践之interface.reflection.json实践>&l ...
- 知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838
知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838
- 【GoLang】golang 最佳实践汇总
最佳实践 1 包管理 1.1 使用包管理对Golang项目进行管理,如:godep/vendor等工具 1.2 main/init函数使用,init函数参考python 1.2.1 main-> ...
- Golang 高效实践之defer、panic、recover实践
前言 我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑.但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃.Golang有没有一种异常 ...
随机推荐
- get、set快捷键那码事儿
今天发现一个省时间的方法.get一下,哈哈 在快捷get/set.或其他那个页面上的方法时,只需Shift+Alt+s 然后,选择哪个方法,就按该方法字母下有横线的那个字母(只按单个字母就行) 在ge ...
- Axios 的基本使用
Axios 是一个基于 promise 的HTTP 库, 可以用在浏览器和 node.js 中. 1. 从浏览器创建 XMLHttpRequests 2. 从node.js 创建 http 请求 3. ...
- P1115 最大子段和(简单DP)
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入格式 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iAi,描述了这段序 ...
- c语言中宏定义#和 ##的作用:
转载:http://www.cnblogs.com/cyttina/archive/2013/05/11/3072969.html 看了这篇文章后了解了,但是文章中的例子比较特别,我在这里加个注释好了 ...
- array_chunk的用法和php操作大数据
一.array_chunk() 函数 二.php操作大数据 1.在操作大数量数据与数据库交互时,比如插入大量数据,db就会报错,这时可以把原本的数据用array_chunk分隔成几个数组块,再循环插入 ...
- PostgreSQL-临时表空间与配置表
虽然我给数据库创建了表空间,但是操作中仍遇到了些问题,需要创建临时表空间. 配置表 首先了解下 postgres 的配置表,手动修改各种配置. 打开即可看到各种配置,包括临时表空间. 临时表空间 1. ...
- Voting CodeForces - 749C (set,模拟)
大意: n个人, 两个党派, 轮流投票, 两种操作(1)ban掉一个人 (2)投票, 每轮一个未被ban的人可以进行一次操作(1)或操作(2), 求最终哪个党派得票最多. 显然先ban人会更优, 所以 ...
- C# ref out parase 理解
这节课我们来学习方法中的参数传递,在面向对象二中,我曾说过,参数也属于变量的一种,在c语言的学习时,同学们都学习过参数这个概念和用法,方法使用参数列表来传递变量的基本语法如下:returnType ...
- python接口自动化 - Requests-3 高级用法
高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...
- Java日志打印方法
一.使用log4j打印日志 1. 下载log4j.jar和commons-logging.jar. log4j.jar下载地址:http://logging.apache.org/log4j/ ...