ActiveMQ基础

消息队列的作用

为什么使用ActiveMQ,不使用其他工具

 

 

下载安装包并启动

http://localhost:8161/admin/ (账号:admin:admin)

Java实现步骤:

复制代码
// 1.创建连接工厂对象(ConnectionFactory)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(URL);
// 2.创建连接对象(Connection)
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建session会话,第一参数表示启用事务处理,第二个参数表示启动哪种应答模式,这里启用的是自动应答
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建目的地(queue/topic)
Queue queue = session.createQueue(QUEUE_NAME);
// 6.创建生产者/消费者
MessageProducer producer = session.createProducer(queue);
// 7.生产/消费消息
producer.send(message);
复制代码

生产者代码:

复制代码
public class MQProducer {
    private static final String URL = "tcp://localhost:61616";
    private static final String QUEUE_NAME = "queue-test";
    private static final String TOPIC_NAME = "topic-test";
    
    public static void main(String[] args) throws JMSException {
        ConnectionFactory ConnectionFactory = new ActiveMQConnectionFactory(URL);
        Connection connection = ConnectionFactory.createConnection();
        connection.start();
        
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue destination = session.createQueue(QUEUE_NAME); 
//      Topic destination = session.createTopic(TOPIC_NAME); // Topic消息
        MessageProducer producer = session.createProducer(destination);    
        for(int i = 0; i < 10; i++) {
            TextMessage message = session.createTextMessage("Message" + i);
            producer.send(message);
            System.out.println("Sent message" + i);
        }
        
        producer.close();
        session.close();
        connection.close();
    }
}
复制代码

消费者代码:

 

复制代码
public class MQConsumer {
    private static final String URL = "tcp://localhost:61616";
    private static final String QUEUE_NAME = "queue-test";
    private static final String TOPIC_NAME = "topic-test";
    
    public static void main(String[] args) throws JMSException, InterruptedException {

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(URL);
        Connection connection = connectionFactory.createConnection();
        
        // 消费者1 : Queue & Topic Consumer
        connection.start();       
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue destination = session.createQueue(QUEUE_NAME); // Topic destination = session.createTopic(TOPIC_NAME);
        MessageConsumer consumer = session.createConsumer(destination);

        // 消费者2 : Topic Subscriber
//      connection.setClientID("client-test");
//      connection.start();
//      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//      Topic destination = session.createTopic(TOPIC_NAME);
//      TopicSubscriber consumer = session.createDurableSubscriber(destination, "subscription-test");
        
        // 接收消息1 : MessageListener异步接收消息
         consumer.setMessageListener(new MessageListener(){
             @Override
             public void onMessage(Message message) {
                 try {
                     System.out.println("Received " + ((TextMessage) message).getText());
                 } catch (JMSException e) {
                     e.printStackTrace();
                 }
             }            
         });
         Thread.sleep(10000); // 主线程等待一段时间后结束
         
        // 接收消息2 : receive同步阻塞等待消息
//      for(int i = 0; i < 10; i++) {
//          TextMessage message = (TextMessage) consumer.receive();
//          System.out.println("Received " + message.getText());
//      }
        
        consumer.close();
        session.close();
        connection.close();
    }
}
复制代码

 

 

Producer consumer receive messageListener

topic

queue

JMS

消息可靠性之持久化  JDBC

topic持久化

事务

签收

点对点发布订阅

spring整合activemq

zookeeper+replicated levelDB

异步投递

延迟投递

定时投递

重试机制

死信队列

防止重复调用

 

posted @   安小  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2018-07-23 mongodb常用语法
点击右上角即可分享
微信分享提示