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!~~~~~

时间: 2024-07-31 00:12:16

golang rabbitmq实践(啰嗦)的相关文章

golang rabbitmq实践 (二 实现简单的消息收发)

1:驱动 本来打算自己写一个驱动的,后来发现github上面已经有了,那我就直接拿现成的了, 驱动采用 github.com/streadway/amqp ,直接import就可以啦! 2:exchange and queue 在上一篇文章中,我们已经创建好virtualhost .exchange and queue,所以我们先定义这些常量 const ( queueName = "push.msg.q" exchange = "t.msg.ex" mqurl =

golang rabbitmq实践 (一 rabbitmq配置)

1:环境选择 系统为ubuntu 15.04 ,我装在虚拟机里面的 2:rabbitmq tabbitmq 3.5.4  download url : http://www.rabbitmq.com/ 3:安装 在Ubuntu环境下,建议直接下载deb安装包,可以再ubuntu软件包管理中直接安装,并且安装其他依赖包 4:启动 如果是deb包直接安装的话,默认是直接启动的,也可以通过 sudo  rabbitmq-server start 启动.如果提示 node with name "rabb

Golang 高效实践之并发实践

前言 在我前面一篇文章Golang受欢迎的原因中已经提到,Golang是在语言层面(runtime)就支持了并发模型.那么作为编程人员,我们在实践Golang的并发编程时,又有什么需要注意的点呢?下面我会跟大家详细的介绍一些在实际生产编程中很容易踩坑的知识点. CSP 在介绍Golang的并发实践前,有必要先介绍简单介绍一下CSP理论.CSP,全称是Communicating sequential processes,翻译为通信顺序进程,又翻译为交换消息的顺序程序,用来描述并发性系统的交互模式.

Golang 高效实践之并发实践context篇

前言 在上篇Golang高效实践之并发实践channel篇中我给大家介绍了Golang并发模型,详细的介绍了channel的用法,和用select管理channel.比如说我们可以用channel来控制几个goroutine的同步和退出时机,但是我们需要close channel通知其他接受者,当通知和通信的内容混在一起时往往比较复杂,需要把握好channel的读写时机,以及不能往已经关闭的channel中再写入数据.如果有没有一种更好的上下文控制机制呢?答案就是文章今天要介绍的context,

RabbitMQ实践体验

最近由于业务需要进行性能升级,将原来需要经过http进行数据交互的方式修改为消息队列的形式.于是原来的同步处理的方式变成了异步处理,在一定程度上提升我们系统的性能,不过debug的时候,不免哭了出来.因为每个环节都需要进行详细检查.对于RabbitMQ,我们知道,其是AMQP的一种代理服服务器,具有一套严格的通信方式,即在核心产品进行通信的各个方面几乎都采用了RPC(Remote Procedure Call, 远程过程调用)模式. AMQ与RabbitMQ进行交互 RabbitMQ通信时用到的

NET下RabbitMQ实践[配置篇]

这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战.当然不排除加餐情况.  介绍: rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. RabbitMQ的官方站:http://www.rabbitmq.com/          AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),A

NET下RabbitMQ实践[示例篇]

在上一篇文章中,介绍了在window环境下安装erlang,rabbitmq-server,以免配置用户,权限,虚拟机等内容.         今天将会介绍如果使用rabbitmq进行简单的消息入队,出队操作,因为本文演示的环境要用到上文中配置的环境,所以要运行本文sample,请先按上一篇中完成相应环境配置.         首先,我们下载官方的.net客户端软件,链接:http://www.rabbitmq.com/dotnet.html         下载并安装之后,将安装目录下的这两个

NET下RabbitMQ实践[实战篇]

之前的文章中,介绍了如何将RabbitMQ以WCF方式进行发布.今天就介绍一下我们产品中如何使用RabbitMQ的!          在Discuz!NT企业版中,提供了对HTTP错误日志的记录功能,这一点对企业版非常重要,另外存储错误日志使用了MongoDB,理由很简单,MongoDB的添加操作飞快,即使数量过亿之后插入速度依旧不减.          在开始正文之前,先说明一下本文的代码分析顺序,即:程序入口==>RabbitMQ客户端===>RabbitMQ服务端.好了,闲话少说,开始

NET下RabbitMQ实践[WCF发布篇]

在之前的两篇文章中,主要介绍了RabbitMQ环境配置,简单示例的编写.今天将会介绍如何使用WCF将RabbitMQ列队以服务的方式进行发布.          注:因为RabbitMQ的官方.net客户端中包括了WCF的SAMPLE代码演示,很适合初学者,所以我就偷了个懒,直接对照它的SAMPLE来说明了,算是借花献佛吧,呵呵. 首先我们下载相应源码(基于.NET 3.0),本文主要对该源码包中的代码进行讲解,链接如下:        Binary, compiled for .NET 3.0