activemq 入门

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 测试即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值