一:搭建及运行
1:解压下载好的activemq压缩包
2:进入${dir}/apache-activemq-5.5.0/bin目录,双击运行activemq.bat,
等待出现:
3:进入http://127.0.0.1:8161/admin/(这是activemq自带的一个web项目,进入的账号密码在配置文件中指定,稍后会讲),
图中红色标识的是:当前服务器有那些主题,及该主题的生产消费情况。主题可在自己的web项目中指定,稍后会讲。
二:开始建立自己的web工程
2.1:建立maven项目,引入jar,具体如下:
4.0.0
web_pro
pro
war
1.0-SNAPSHOT
pro Maven Webapp
http://maven.apache.org
4.2.5.RELEASE
3.2.7
1.2.5
1.7.7
2.7.2
1.2.17
UTF-8
redis.clients
jedis
${jedis.version}
org.springframework
spring-context
4.2.1.RELEASE
org.springframework
spring-web
4.2.1.RELEASE
org.springframework
spring-webmvc
4.2.1.RELEASE
org.springframework
spring-websocket
4.2.1.RELEASE
org.springframework.security
spring-security-web
3.0.2.RELEASE
org.springframework.security
spring-security-config
3.0.2.RELEASE
org.springframework.security
spring-security-taglibs
3.0.2.RELEASE
org.springframework
spring-orm
4.2.1.RELEASE
org.slf4j
slf4j-log4j12
1.7.25
net.sourceforge.jexcelapi
jxl
2.6.12
com.mchange
c3p0
0.9.5.2
javax.servlet
javax.servlet-api
4.0.0
provided
javax.servlet
jstl
1.2
javax.servlet.jsp
jsp-api
2.2
provided
com.fasterxml.jackson.core
jackson-core
2.9.1
com.fasterxml.jackson.core
jackson-annotations
2.9.1
com.fasterxml.jackson.core
jackson-databind
2.9.1
commons-io
commons-io
2.5
commons-codec
commons-codec
1.10
commons-fileupload
commons-fileupload
1.3.3
org.aspectj
aspectjrt
1.8.10
net.sf.json-lib
json-lib
2.4
jdk15
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.2.2
com.github.pagehelper
pagehelper
5.1.2
mysql
mysql-connector-java
5.1.21
com.alibaba
druid
1.1.3
com.mchange
c3p0
0.9.5.2
org.mybatis.generator
mybatis-generator-core
1.3.4
org.springframework
spring-test
3.2.4.RELEASE
provided
org.junit.jupiter
junit-jupiter-api
RELEASE
junit
junit
4.12
com.alibaba
fastjson
1.2.39
cn.jpush.api
jpush-client
3.2.17
cn.jpush.api
jiguang-common
1.0.3
io.netty
netty-all
4.1.6.Final
compile
com.google.code.gson
gson
2.3
net.coobird
thumbnailator
0.4.8
org.apache.poi
poi
3.17
net.sourceforge.jexcelapi
jxl
2.6.12
dom4j
dom4j
1.6.1
org.testng
testng
RELEASE
org.apache.activemq
activemq-all
5.9.0
org.apache.activemq
activemq-pool
5.9.0
org.springframework
spring-jms
4.2.1.RELEASE
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.7
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
mysql
mysql-connector-java
5.1.21
true
pro
注意:上面的pom.xml主要是引入了这几个包
2.2:然后修改application-context,xml,主要是在项目中配置activemq
三:解释配置文件
到这一步基本完成了整合,具体要注意的步骤有一下几点:
3.1: org.apache.activemq.ActiveMQConnectionFactory:是连接工厂,该类的构造方法传递了连接服务的用户名和密码,服务器的ip,注意该ip可以是个集群.用户名密码的指定配置在${dir}\apache-activemq-5.9.0\conf\activemq.xml中的
3.2:activemq.xml文件中的用户名密码与自己项目配置文件里关于activemq配置的用户名密码一致,然后连接工厂的第三个参数为activemq的服务器ip,它采用tcp连接,并且failover进行集群,并附带超时参数2000ms,其中的连接端口可以更改,具体在:${dir}\apache-activemq-5.9.0\conf\activemq.xml的
3.3:构造队列:org.apache.activemq.command.ActiveMQQueue:构造方法中指定了自己队列的名称
3.4:整合jms:
3.5:再接着整合自己编写的消息接受类和发送类,这个两个类主要是是实现了一些监听方法,然后做自己的业务处理
3.6:最后将自己的监听类和配置activemq的消息队列及actiemq的连接工厂整合到jms监听中
四:项目中的使用场景及额外注意步骤:
activemq是在高并发下将请求处理的队列化,它自身处理多线程等一系列问题,所以我们直接用即可,监听好它的消息,然后一步步将队列中的请求消费完。
提到高并发就不由想到nginx,有了nginx负载不就完了吗?为什么还用消息队列呢?
答案如下:1:系统的瓶颈往往出在数据库,nginx的架构适合于多系统多数据库,对于数据库集群可适用,但这会导致数据同步等一系列问题增多.activemq针对的是单数据库,比如有些场景只使用了一个数据库(类似一些中心数据库),mq使用场景图如下:
2:比如持久层数据库和redis同步时,如果出现大量请求,数据同步方案也可以放在activemq队列中处理,防止并发出现的问题
五:注意事项
使用activemq时,需防止单机宕机导致数据丢失,所以需要处理额外步骤:
1:需要做集群
2:做数据持久化,持久方案有多种,目前推荐activemq自带的KahaDB方式处理