初识activemq消息中间件(p2p模式)
签收模式
activemq有4中签收模式,分别是CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE、SESSION_TRANSACTED
- CLIENT_ACKNOWLEDGE,客户端确认签收
- AUTO_ACKNOWLEDGE自动签收,有可能导致消息的丢失,或者消息的重复接受
- DUPS_OK_ACKNOWLEDGE,"消息可重复"确认,此模式下,可能会出现重复消息,并不是一条消息需要发送多次ACK才行。它是一种潜在的"AUTO_ACK"确认机制,为批量确认而生,而且具有“延迟”确认的特点。
- SESSION_TRANSACTED,当session使用事务时,就是使用此模式。在事务开启之后,和session.commit()之前,所有消费的消息,要么全部正常确认,要么全部redelivery
事务
activemq支持事务,在创建session时指定是否支持事务,如果开启了事务,必须commit。
持久化
activemq也可以指定是否持久化消息,可以调用producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);来指定是否持久化,默认是持久化的。
一个生产者一个消费者
需要注意的是,生产者和消费者的目的地要一样
生产者
public class Producer {
//用户名
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
//密码
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
//url
private static final String URL = ActiveMQConnection.DEFAULT_BROKER_URL;
private static ConnectionFactory factory = null;
private static Connection connection = null;
private static Session session = null;
public static void main(String[] args) throws JMSException {
factory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, URL);
connection = factory.createConnection();
connection.start();
/*
*第一个参数:是否打开事务,如果打开了事务,必须commit
* 第二个参数:消息确认模式,一般设置为CLIENT_ACKNOWLEDGE
*/
session = connection.createSession(false,Session.SESSION_TRANSACTED);
//通过