当前位置: 首页 > news >正文

分布式消息队列ActiveMQ+Spring整合

消息队列MQ简介

消息队列技术是分布式应用间交换信息的一种技术。使用消息队列可以很好的将任务以异步的方式进行处理或者进行数据传送和储存等。例如当你频繁地向数据库中插入数据、频繁的向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢/较复杂的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理。
常规的使用场景:短信服务、电子邮件服务、图片处理服务、好友动态推送服务等。
特性:异步、顺序读写、高性能、协议简单。所以一般会用于解决大量的服务器端异步请求,同时可以实现服务端的负载均衡和业务的容灾。

ActiveMQ简介

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE
1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位

消息模型: 点对点(p2p)、发布/广播(Pub/Sub)。

流程:

p2p:消息生产者>消息队列>消息消费者

Pub/Sub:主题>发布者>订阅者

ActiveMQ准备

apache官网下载activeMQ:

activemq.apache.org/download.ht…

进行解压后运行其bin目录下面的win32或者win64文件夹下的activemq.bat文件启动activeMQ。

  • Maven配置

配置connectionFactory

connectionFactory是Spring用于创建到JMS服务器链接的,Spring提供了多种connectionFactory.

PooledConnectionFactory: JmsTemlate每次发送消息时只会缓存connection,session和productor,不会缓存consumer。因此只适合于生产者发送消息,这个只是在要求消息处理的及时性不是特别高的情况下。

SingleConnectionFactory: 对于建立JMS服务器链接的请求会一直返回同一个链接,并且会忽略Connection的close方法调用。

CachingConnectionFactory: 继承了SingleConnectionFactory,所以它拥有SingleConnectionFactory的所有功能,同时它还新增了缓存功能,它可以缓存Session、MessageProducer和MessageConsumer。我们使用CachingConnectionFactory来作为示例。

在此我向大家推荐一个架构学习交流群。交流学习群号:478030634 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

Spring配置

applicationContext.xml 设置:

 <!-- 获取ActiveMQ提供的ConnectionFactory -->
<amq:connectionFactory id="amqConnectionFactory"
<!--设置ActiveMQ服务器地址及端口-->
    brokerURL="failover:(tcp://localhost:61616)?initialReconnectDelay=100" />

<!-- 配置ActiveMQ服务器连接conneciotnFactory -->
<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <!-- 将ActiveMQ提供的ConnectionFactory注入到Spring管理的connectionFactory中 -->
    <constructor-arg ref="amqConnectionFactory" />
    <!--设置缓存大小-->
    <property name="sessionCacheSize" value="100" />
</bean>

<!-- 配置JMS消息生产者 -->
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
    <constructor-arg ref="connectionFactory" />
    <!-- 非pub/sub模型(发布/订阅),即队列模式 -->
    <property name="pubSubDomain" value="false" />
</bean>

<!-- 定义Queue监听器 -->
<jms:listener-container concurrency="10"
    destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
    <!--监听的java类-->
    <jms:listener destination="queue" ref="ConsumerMessageListener" />
</jms:listener-container>
          复制代码

实现消息监听,获取消息并消费



相关文章:

  • Vue2.x学习三:事件处理生命周期钩子
  • MySQL的prompt不生效的问题
  • Django之ModelForm(二)-----ModelForm组件
  • Lua使用总结
  • Python模块-threading模块
  • xtrabackup 备份原理
  • tkinter简单打开网址 + 执行系统命令
  • flask学习笔记之flask-migrate
  • 项目实战 (规范、轮子、学习案例) - iOS
  • iOS中类、元类、isa详解
  • 生鲜 B2B 平台的产品体系如何迭代(B2B 技术共享第三篇)
  • CentOS7.X安装php-7.x.x
  • 2018年UI设计师的前景如何?长沙牵引力用数据告诉你
  • JS深拷贝总结
  • centos7安装
  • 2019.2.20 c++ 知识梳理
  • Android单元测试 - 几个重要问题
  • ES6简单总结(搭配简单的讲解和小案例)
  • Fabric架构演变之路
  • Java的Interrupt与线程中断
  • Js基础知识(一) - 变量
  • Mac转Windows的拯救指南
  • maven工程打包jar以及java jar命令的classpath使用
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • PHP 的 SAPI 是个什么东西
  • spring boot下thymeleaf全局静态变量配置
  • 汉诺塔算法
  • 如何学习JavaEE,项目又该如何做?
  • 新手搭建网站的主要流程
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • - 转 Ext2.0 form使用实例
  • ​2020 年大前端技术趋势解读
  • ​io --- 处理流的核心工具​
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)Android开发优化---------UI优化
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (笔试题)分解质因式
  • (附源码)php投票系统 毕业设计 121500
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)kafka实战——kafka源码编译启动
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)3D模板阴影原理
  • ******之网络***——物理***
  • .cfg\.dat\.mak(持续补充)
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net Core 中间件验签
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net6Api后台+uniapp导出Excel
  • @Data注解的作用
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?