activemq入门

下载activemq :http://activemq.apache.org/components/classic/download/

windows点击activemq.bat一闪而过,使用命令 activemq-admin.bat start 启动

浏览器访问:http://localhost:8161

项目中使用  tcp://127.0.0.1:61616     是61616端口不是8161端口

生产者: 



import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @PackageName com.example.demo
 * @ClassName SendTest
 * @Description
 * @date 2019/9/12 9:47
 */
public class SendTest {

    //定义ActivMQ的连接地址
    private static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";
    //定义发送消息的队列名称
    private static final String QUEUE_NAME = "activemq";

    public static void main(String[] args) throws JMSException {
        //创建连接工厂
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //创建连接
        Connection connection = activeMQConnectionFactory.createConnection();
        //打开连接
        connection.start();
        //创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建队列目标 p2p
//        Destination destination = session.createQueue(QUEUE_NAME);
//        发布/订阅
        Destination destination = session.createTopic(QUEUE_NAME);
        //创建一个生产者
        javax.jms.MessageProducer producer = session.createProducer(destination);
        //创建模拟100个消息
        for (int i = 1 ; i <= 100 ; i++){
            TextMessage message = session.createTextMessage("我发送message:" + i);
            //发送消息
            producer.send(message);
            //在本地打印消息
            System.out.println("我现在发的消息是:" + message.getText());
        }
        //关闭连接
        connection.close();
    }

}

消费者:

 



import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @PackageName com.example.demo
 * @ClassName ResponseTest
 * @Description
 * @date 2019/9/12 9:47
 */
public class ResponseTest {
    //定义ActivMQ的连接地址
    private static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";
    //定义发送消息的队列名称
    private static final String QUEUE_NAME = "activemq";
    public static void main(String[] args) throws JMSException {
        //创建连接工厂
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //创建连接
        Connection connection = activeMQConnectionFactory.createConnection();
        //打开连接
        connection.start();
        //创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建队列目标 p2p
//        Destination destination = session.createQueue(QUEUE_NAME);
//        发布/订阅
        Destination destination = session.createTopic(QUEUE_NAME);

        //创建消费者
        javax.jms.MessageConsumer consumer = session.createConsumer(destination);
        //创建消费的监听
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                TextMessage textMessage = (TextMessage) message;
                try {
                    System.out.println("获取消息:" + textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

总结:2种模式,一种是点对点模式,使用queue队列,消息不能共享。一种是发布/订阅模式,消息可以共享。

场景:粉丝关注公众号,公众号发送消息,粉丝接受到消息之后再发送消息给公众号,告知公众号已接收到消息。此为模拟场景,不是真实场景。其他场景自行研究

公众号发送消息,粉丝接受到消息:使用发布/订阅模式,生产者只管发送消息,至于消费者到底有没有接收消息,生产者根本不关心。

粉丝接受到消息之后再发送消息给公众号,告知公众号已接收到消息:使用点对点的模式,生产者只需要发送消息给单一消费者即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值