以下安装都是以 ~/ 目录作为安装根目录。
在公司的技术分享中,就有聊到rocketmq的消费模式,特此总结一下。
今天在SIT环境部署dubbo容器的时候遇到一个问题, 明明我的dubbo容器已经注册到zk了, 而且在dubbo控制台也能看到提供者和消费者的信息, 可就是死活调用不了, 仔细一看, 发现提供者的地址不对啊, 这明明不是我的dubbo容器对应的那天服务器地址.这是为什么呢?下面我们来分析一波dubbo服务暴露注册地址和端口那一段代码.
记录一下搭建RocketMQ集群的过程.
纯粹是为了记录搭建的过程.
咱们程序员平时都是加班加点的,很少有时间花在学习提升技术上,有些人问我平时是怎么学习的,其实我平时都很忙,我通常都是每晚上回去宿舍自己挤时间学习的,以至于习惯了1-2点睡觉,剩下的就是利用平时的一些零碎时间来补充能量,比如上下班在地铁上在掘金看下技术文章,在极客时间买一些技术大咖开的课程,还别说,坚持下去真的会有意想不到的收获,下面我推荐两个极客时间的专栏,这两个专栏讲的知识,对于程序员来说堪称基石的存在,就如武林中的内功心法。
在 Java 并发领域,我们解决并发安全问题最粗暴的方式就是使用 synchronized 关键字了,但它是一种独占形式的锁,属于悲观锁机制,性能会大打折扣。volatile 貌似也是一个不错的选择,但 volatile 只能保持变量的可见性,并不保证变量的原子性操作。
CAS 全称是 compare and swap,即比较并交换,它是一种原子操作,同时 CAS 是一种乐观机制。java.util.concurrent 包很多功能都是建立在 CAS 之上,如 ReenterLock 内部的 AQS,各种原子类,其底层都用 CAS来实现原子操作。
之前一直使用 SpringCloud Stream 这个组件来整合 RabbitMQ,但发现其非常不好用,配置极其繁琐,对RabbiMQ 过度封装,导致对开发者极其不友好。所以,我在这里介绍一种 SpringBoot Starter 整合的方法。
在项目中想要 RabbitMQ 变得更加健壮,就要使得其变成高可用,所以我们要搭建一个 RabbitMQ 集群,这样你可以从任何一台 RabbitMQ 故障中得以幸免,并且应用程序能够持续运行而不会发生阻塞。而 RabbitMQ 本身是基于 Erlang 编写的,Erlang 天生支持分布式(通过同步 Erlang 集群各节点的 cookie 来实现),因此不需要像 ActiveMQ、Kafka 那样通过 ZooKeeper 分别来实现 HA 方案和保存集群的元数据。
MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法,即我们常说的中间件之一,而 RabbitMQ 则是 MQ 的一种开源实现,遵循 AMQP(高级消息队列协议) 协议。