比较项目 | Topic模式队列 | Queue模式队列 |
---|---|---|
工作模式 | 订阅发布模式,如果有没有订阅者,消息将会被丢弃,如果有多个,消息将会全部都能收到 | “负载均衡模式”,如果没有消费者,消息不会被丢弃,如果有多个消费者,那么,一条消息也会发送给其中一个消费者,并且要求消费者ack(签收)消息 |
有无状态 | 无状态 | Queue数据默认在mq服务器上以文件的形式保存,比如Active MQ一般保存在SAMQ_HOME\data\kr-store\data下面,也可配置成DB储存 |
传递完整性 | 如果没有订阅者消息会被丢弃 | 消息不会丢其 |
处理效率 | 由于消息按照订阅者的数量进行复制,所以处理性能会随着订阅者的数量增加而明显降低,并且还要结合不同的消息协议自身的性能差异 | 由于一条消息只发送给一个消费者,所以就算消费者再多,性能也不会有明显下降,当然不同的消息协议的具体性能也有差异 |
JavaEE是一套使用Java进行企业级应用开发的大家遵守的13个核心工业标准。JavaEE平台提供的一组基于组件的方法来加快设计,开发,装配以及企业部署应用程序
JDBC(Java Database)数据库连接
JDNI(Java Naming and Directory)的名命和目录接口
EJB(Enterprise JavaBean)
RMI(Remote Method Invoke)远程方法调用
Java IDL(Interface Description Language)/CORBA(Common Object Broker Arcgitecture)接口定义语言/公用对象请求代理程序体系结构
JSP(Java Server Page)
Servlet
XML(Extensible Markup Language)可扩展标记语言
JMS(Java Transaction Service)Java消息服务
JTA(Java Transaction API)Java事务API
JTS(Java Transaction Service)Java事务服务
JavaMail
JSAF(JavaBean Activation Framework)
Java消息服务是指两个应用程序之间进行异步通讯的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建,发送,读取消息,用于JAVA的应用程序开发,在JavaEE中,当连个程序使用JMS进行通讯是,他们之间并不是直接相连的,二十通过消息的手法组件关联起来以达到解耦异步削峰的效果
Active MQ
Rabbit MQ(Erlang)
Rocket MQ(阿里)
Kafka(大数据)
Provider : MQ服务器
Producer : 消息的生产者
Message : 消息
Consumer : 消费者
消息头
TextMessage textMessage = session.createTextMessage("msg" + i);
?
//目的地队列或者主题
textMessage.setJMSDestination();
?
//消息持久和非持久,持久消息之发送一次,宕机之后消息也不会丢失
textMessage.setJMSDeliveryMode();
?
//过期时间 0永不过期
textMessage.setJMSExpiration();
?
//消息的优先级0~9,0~4是普通默认4,消息的加急
textMessage.setJMSPriority();
?
//id唯一识别有中间件产生
textMessage.setJMSMessageID();
?
//send也可以统一的批处理
textMessage.send();
消息体
封装具体的消息数据
//普通字符串
session.createTextMessage();
//二进制数组消息包含一个byte[]
session.createBytesMessage();
//java数据流消息,标准流炒作来顺序的填充和读取
session.createStreamMessage();
//一个map类型的下拍戏,key为string,值为java的基本类型
session.createMapMessage();
//对象消息包含一个可序列化的java对象
session.createObjectMessage();
消息属性
消息头的扩展
//消息属性
textMessage.setStringProperty();
textMessage.setBooleanProperty();
持久
事务
事务偏生产者,签收偏消费者
签收
kahadb:5.4‘以后的默认基于日志文件的消息存储(类似于redis持久化的aof)
消息存储使用一个事务日志,和仅仅用一个索引文件来储存他所有的地址
<persistenceAdapter>
<kahaDB direcory="${activemq.data}/kahadb"></kahaDB>
</persistenceAdapter>
jdbc
环境搭建
添加mysql驱动包(包括连接池druid)到mq的lib文件夹
jdbc持久化配置
<persistenceAdapter>
<!-- 默认的配置
<kahaDB directory="${activemq.data}/kahadb"/>
-->
<!-- 配置jdbc持久化的方法-->
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true"/>
</persistenceAdapter>
创建数据源在active.xml,broker标签之后。import标签之前
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
创建数据库activemq
启动 MQ 然后查看数据库
原文:https://www.cnblogs.com/yangenyu/p/12070392.html