ActiveMQ

1、安装

官方网址:http://activemq.apache.org/activemq-5154-release.html

window:

先从官网上下载window压缩包,并解压,打开bin目录,会看到三个可执行文件。

activemq是直接运行。InstallService则是将此应用一服务的方式启动,选择这个比较好一些。

启动成功后,我们可以访问activemq管理页面。http://localhost:8161  默认是8161端口。

Linux:

先从官网下载Linux压缩包,解压。进入bin目录,使用 activemq start 启动服务。

2、maven依赖

         <dependency>
            <groupId>javax.jms</groupId>
            <artifactId>jms</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.7.0</version>
        </dependency>

3、代码实现:

3.1常量类

public class MqConstans {

public static final String URL = "tcp://127.0.0.1:61616";

public static final String QUEU_NAEM = "test-queue";

public static final String TOPIC_NAME = "test-topic";

}

3.2 p2p模式

生产者:生产100个消息

public class Producter {
    public static void main (String[] args) throws JMSException {
        //1.获取连接工厂
        ConnectionFactory factory = new ActiveMQConnectionFactory(MqConstans.URL);
        //2.获取连接
        Connection connection = factory.createConnection();
        //3.启动连接
        connection.start();
        //4.创建会话,第一个参数的意思是是否使用事务,第二个是应答模式,这个设置为自动应答模式。session可以创建消费者,生产者,消息来源,消息等。比较重要
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        //5.创建消息来源,目标
        Destination destination  = session.createQueue(MqConstans.QUEU_NAEM);
        //6.创建生产者
        MessageProducer producer = session.createProducer(destination);

        for (int i=0;i<100;i++){
            //7.创建消息
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("text" + i);
            //8.发送消息
            producer.send(textMessage);
        }
        System.out.println("发送成功");
        //9.关闭连接
        connection.close();
    }
}

消费者:前半部分和生产者一样,只贴出下半部。

//创建消费者
MessageConsumer consumer = session.createConsumer(destination);
//使用消息监听,由于是异步的,close不能立即执行,否则会监听不到消息
//或者循环调用consumer的reciver方法,立即执行,这是同步的。可以直接关闭
consumer.setMessageListener(o->{
    try {
         TextMessage message = (TextMessage) o;
          System.out.println(message.getText());
         } catch (JMSException e) {
                e.printStackTrace();
        }
     });
 //connection.close();

运行,可以看到生产者的100条消息全部被消费者消费。在执行消费者,这回没有任何消息打出,这说明在p2p模式中,消息只能被消费一次。

在调用生产者生产100条消息,这回创建俩个消费者,可以看到是均分消费消息的。

3.3主题模式

代码几乎一样,只是destination不同,一个是queue,一个是topic。不同的代码:

//创建主题
Destination destination  = session.createTopic(MqConstans.TOPIC_NAME);

我们先启动生产者,再启动消费者,发现消费者并没有接收到任何消息。

更改启动顺序,发现消费者收到消息。

启动俩个消费者,启动生产者,俩个消费者的消息完全一样。

3.4俩种方式异同:

主题模式需要消费者先订阅再启动发布者,然后消费者才会接受(就好像你订报纸一样,只有你订报纸之后才能收到报)而队列模式是只要消息队列里面有消息,消费者打开就可以消费,不管实在生产者打开前还是后。主题模式是多个消费者都能全盘接收到所有消息;而队列模式是多个消费者的多个连接(不是单纯的多个消费者而是多个连接!)平衡负载分配信息(可以大概理解为平均分)。

主题模式类似微信公众号,只要关注了某个公众号,那么公众号的消息推送对每个粉丝来说都是一样的。

p2p模式类似于我们的QQ俩人聊天,即使你不在线,但是消息已存储在队列中,只要你上线,就可以获取到消息(多个消费者不考虑)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值