前言

结合前面提到的各种rabbitMQ的使用,本节开始综合的对比市场上流行的redis,kafka,activeMQ等的进行对比,附加使用的代码Demo提供参考。文章大致的结构分为,rabbitMQ的使用介绍,这里的介绍结合项目的使用源码,主要是结合MVC的使用,而其他的整合,比如springcloud,springboot等在这篇介绍之后,后续会继续补充。而题目提及到的大家都不会陌生,可能了解比较少的是lMax,这是一款高性能的并发框架,是无锁的并行处理的框架,在ifeve有篇文章详细的介绍到,可以移步前往观看。本节还是从rabbitMQ的使用的案例开始介绍。以及附上阿里巴巴测试的数据。

RabbitMQ的高级应用

rabbitMQ整合spirngAMQP的使用,主要对SimpleMessageListenerContainer以及MessageListenerAdapter,MessageConverter的介绍,介绍这些类之前先介绍一个重要的类rabbitAdmin,可以很好的操作rabbitMQ的交换机以及队列,路由等的组件,可以很好是结合一起使用,主要是通过excute方法来实现交换机,队列等的删除,声明,创建等。下面是其构造方法

@Bean
public RabbitAdmin rabbitAdmin (ConnectionFactory connectFactory){RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);rabbitAdmin.setAutoStartup(true);return rabbitAdmin;//返回一个设置好的自动启动的rabbitAdmin
}

而这个ConnectionFactory的构造方法是

@Bean
public ConnectionFactory connectionFatory(){CachingConnectionFactory connectionFctory = new CachingConnectionFactory();connectionFactory.setAddresses("");connectionFactory.setUsername();connectionFactory.setPassword();connectionFactory.setVirtualHost();return connectionFactory;
}

如果是通过rabbitAdmin对交换机,队列,路由键等的操作,就是通过declareQueue();declareExchange();同样绑定对象也是declareBinding();
注意的是声明绑定对象的时候入股欧式bind队列的话,faout是没有路由键配置项目。
而生产使用的最多的是RabbitTemplate这个类来对消息进行转换发送,而消息的配置类

@Bean
public void mseConf(){MessagePropertise message = new MessagePropertise();message.getHeaders().put();Messsage message = new Message();rabbitTemplate.converAndSend("","",message,new MessagePostProcessor(){@Overridepublic Message postProcessMessage(Message message){message.getHeader();return message;}});
}

而消息的发送端的伪代码大致如上,至于监听消息发送的一端就是通过SimpleMessageListenerContainer,可以实现服务启动之后动态的实现对消息的监听消费。

@Bean
public SimpleMessageListenerContainer messageContaioner(ConnectionFactory connectionFactory){SimpleMessageListenerContaioner contaioner =  new SimpleMessageListenerContainer(connectionFactory);container.setQueues();container.setMaxConcurrentConsumers();container.setAcknowledgeMode();container.setMessageListener(new ChannerAwareMessageListener(){@Overridepublic void onMessage(Message message,Channel channel){String msg = new String(message.getBody());}});container.setConsumerTagStrategy(new ConsumerTagStrategy(){@Overridepublic String createContainerTag(String queue){return "";//返回对队列的操作的字符串}});return container;
}

上面的监听器的伪代码的大致,而在生产的时候一般都是使用适配器实现消息的监听,使用到MessageListenerAdapter,其构造方法是传入一个Object类型的delegate对象。
上面listener的伪代码就可以使用adapter来替代。

MessageListenerAdapter adapter = new  MessageListernerAdapter(new MessageDelegate());
container。setMessageListener(adapter);

这里的delegate是自己定义的source,从之前的设计模式的章节里面提到的对source进行匹配处理,从伪代码的角度来看看

public class MessageDelegate {public void handleMessage(byte[] messageBody) {System.err.println("默认方法, 消息内容:" + new String(messageBody));}public void consumeMessage(byte[] messageBody) {System.err.println("字节数组方法, 消息内容:" + new String(messageBody));}public void consumeMessage(String messageBody) {System.err.println("字符串方法, 消息内容:" + messageBody);}public void method1(String messageBody) {System.err.println("method1 收到消息内容:" + new String(messageBody));}public void method2(String messageBody) {System.err.println("method2 收到消息内容:" + new String(messageBody));}public void consumeMessage(Map messageBody) {System.err.println("map方法, 消息内容:" + messageBody);}public void consumeMessage(Order order) {System.err.println("order对象, 消息内容, id: " + order.getId() + ", name: " + order.getName() + ", content: "+ order.getContent());}public void consumeMessage(Packaged pack) {System.err.println("package对象, 消息内容, id: " + pack.getId() + ", name: " + pack.getName() + ", content: "+ pack.getDescription());}public void consumeMessage(File file) {System.err.println("文件对象 方法, 消息内容:" + file.getName());}
}

Redis,kafka,activeMQ,RabbitMQ,JVM, lMax Disrupt等实现的队列进行对比--开篇相关推荐

  1. 朱大能求职之旅-为什么使用消息队列?消息队列有什么优缺点?Kafka/Activemq/Rabbitmq/Rocketmq优缺点对比?

    1. 面试题 为什么使用消息队列啊?消息队列有什么优点和缺点啊?kafka.activemq.rabbitmq.rocketmq都有什么区别以及适合哪些场景? 2. 面试官心理分析 其实面试官主要是想 ...

  2. Kafka、 RabbitMQ、Redis、 ZeroMQ、 ActiveMQ、 Kafka/Jafka 对比

    Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能. 高吞吐率.即使在非常廉价 ...

  3. 常见消息队列对比(ActiveMQ、ZeroMQ、kafka、RabbitMQ)?

    常见消息队列对比? 消息队列是分布式应用间交换信息的重要组件,消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走. 通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息, ...

  4. 从17 个方面对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 等分布式消息队列

    Johny Sinn 读完需要 21 分钟 速读仅需 7 分钟 知乎答主,一位见多识广.智慧超凡的 IT 人 & AIoT 领跑者.原文首发于 zhihu.com/question/43557 ...

  5. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/qu ...

  6. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://t.cn/RVDWcfe 本文将 ...

  7. activemq broker集群_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ

    来自:知乎,作者:Will 链接:https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 ...

  8. activemq nodejs stomp 重连机制_5分钟优劣分析 Kafka、RabbitMQ、RocketMQ、ActiveMQ消息队列...

    一.资料文档 Kafka:中,有kafka作者自己写的书,网上资料也有一些. rabbitmq:有一些不错的书,网上资料多. zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现 ...

  9. activemq后台管理 看topic消息_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列...

    作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 ...

最新文章

  1. php模拟一个简易的mvc模型
  2. SWIFT入门 Dictionary
  3. vue 下拉框筛选列表_vue下拉菜单选择输入框_带有下拉菜单的Vue搜索输入可提供更多过滤条件...
  4. leetcoed123. 买卖股票的最佳时机 III
  5. 微型计算机2017年9月上,2017年9月计算机一级考试WPS Office冲刺题
  6. myeclipse下Tomcat java.lang.OutOfMemory Error: Java heap space
  7. 彻底封杀讯雷下载,做好网络管理
  8. Matlab 用sort函数排序 二维数组
  9. PHP 大括号{} 的使用
  10. glide源码中包含了那种设计模式_Glide源码解读(一)
  11. android录屏存在什么位置,安卓视频录制在哪里
  12. 运用PS制作3G、4G、5G、6G矢量图方法
  13. JAVA300讲之第四章练习题答案详解
  14. 行业专家对2021年的云计算发展趋势的预测
  15. 小程序授权之支付宝(普通公钥)
  16. c语言中文网va_list,深入C语言可变参数(va_arg,va_list,va_start,va_end,_INTSIZEOF)
  17. 混合现实开发教程unity2017
  18. 基于核的黎曼编码和字典学习
  19. Java编程规范-文件组织与排版
  20. 社保随便挂靠,会判刑罚款您知道吗?

热门文章

  1. 传入中文,返回英文操作名
  2. LabVIEW实时监测和绘制单晶光伏板电压电流和能耗趋势
  3. linux生物代谢图软件,生物图像处理软件汇总(持续更新)
  4. TLP280-4 与 TLP281-4区别
  5. admob里集成KeyMob横幅广告教程
  6. stm32 IO口的八种输入输出模式
  7. HybVIO: 突破实时视觉惯性里程计的极限
  8. Oauth2整合gitee
  9. 轨迹预测数据集:ETH数据集
  10. idata 数据访问组件库 (2021版)