1: 入门级代码如下 两个类一个是sender 一个receiver
package test.activemq.helloworld;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
/**
* Created by Administrator on 2017/2/22.
*/
public class Sender {
public static void main(String[] args) throws Exception {
//第一步:建立ConnectionFactory工厂对象,需要填入用户名、密码、以及需要连接的地址,均使用默认即可,默认端口为“tcp://localhost:61616”
/* 这里我对activemq 添加了 认证插件。 修改配置文件activemq.xml 需要把一下代码加入到 <broker></broker> 标签中间
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="lyq" password="lyq" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>*/
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"lyq",
"lyq",
"tcp://localhost:61616");
//第二步通过ConnectionFactory工厂对象我们创建一个Connection连接,并且调用Connection的Start方法开启连接,Connection默认是关闭的
Connection connection = connectionFactory.createConnection();
connection.start();
//第三步 通过Connection对象创建Session会话,用于接受消息,
// 参数配置1为是否启用事务
// 参数2为签收模式
Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//第四步 通过Session创建Destination对象,指的是一个客户端用来制定生产消息目标和消费消息来源的对象,
// 在PTP模式中,Destination被称为Queue;在Pub/Sub模式 ,Destination被称作Topick及主题
Destination destination = session.createQueue("queue2");
//第五步 我们需要通过Session对象创建消息的发送和接受对象(生产者和消费者)MessageProducer/MessageConsumer
MessageProducer messageProducer = session.createProducer(destination);
//第六步 设置是否持久化
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
for (int i = 0; i < 5; i++) {
//第七步 最后我们使用JMS规范的TextMessage形式创建数据(通过Session对象),并用MessageProducer的Send方法发送数据。同理客户端使用receive方法进行接受数据
TextMessage textMessage = session.createTextMessage();
textMessage.setText("我是消息内容!hello:" + i);
messageProducer.send(textMessage);
}
//session.commit();
//关闭Connection
if (connection != null) connection.close();
}
}
package test.activemq.testmap;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import java.awt.font.TextMeasurer;
/**
* Created by Administrator on 2017/2/23.
*/
public class Receiver {
private final static String SELECTOR_1 = "id > 20";
private ConnectionFactory connectionFactory;
private Connection connection;
private Session session;
private MessageConsumer messageConsumer;
private Destination destination;
public Receiver() throws Exception {
connectionFactory = new ActiveMQConnectionFactory("lyq","lyq","tcp://localhost:61616");
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("frist");
messageConsumer = session.createConsumer(destination,SELECTOR_1);
}
public void revice() throws Exception {
connection.start();
messageConsumer.setMessageListener(new Listener());
}
class Listener implements MessageListener{
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage){
}
if (message instanceof MapMessage){
MapMessage res = (MapMessage) message;
try {
System.out.println(res.getString("name"));
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception{
Receiver receiver = new Receiver();
receiver.revice();
}
}
2:activemq 的过滤用法
在这里 我们 生产端发送的是MapMessage
MapMessage map1 = new ActiveMQMapMessage();
map1.setString("name", "mike");
map1.setInt("age", 23);
map1.setIntProperty("id", 23);
map1.setStringProperty("color", "blue");
//发送代码
messageProducer.send(destination, map1, DeliveryMode.PERSISTENT, 8, 1000 * 60 * 10l);
在消费端代码实现
private final static String SELECTOR_1 = "id > 24";
messageConsumer = session.createConsumer(destination,SELECTOR_1);
MapMessage res = (MapMessage) message;
try {
System.out.println(res.getString("name"));
} catch (JMSException e) {
e.printStackTrace();
}
3:activemq 实现持久化
在activemq.xml 中配置
想原来的kahadb 注释掉 加入<jdbcPersistenceAdapter dataSource="#mysql-ds"/>
<persistenceAdapter>
<!--<kahaDB directory="${activemq.data}/kahadb"/>-->
<jdbcPersistenceAdapter dataSource="#mysql-ds"/>
</persistenceAdapter>
然后添加 bean,bean需要是二级标签
<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://127.0.0.1:3306/test?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
ok 测试即可