ActiveMQ发送消息

Posted 黑色的小蚂蚁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ发送消息相关的知识,希望对你有一定的参考价值。

ActiveMQ发送消息
Java消息服务(Java Message Service, JMS)是一个Java标准,定义了使用消息代理的通用API。
ActiveMQ是一个开源消息代理产品,也是使用JMS进行异步消息传递的最佳选择。
下载ActiveMQ:http://activemq.apache.org
下载解压后进入相应的bin目录:activemq start

借助JMS连接工厂通过消息代理发送消息

创建JMS连接工厂
默认的账户:
ActiveMQConnection.DEFAULT_USER
ActiveMQConnection.DEFAULT_PASSWORD
ActiveMQConnection.DEFAULT_BROKER_URL

Java配置

@Bean
public ConnectionFactory connectionFactory() {
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
    factory.setBrokerURL("tcp://localhost:61616");
    return factory;
}

XML配置

<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory" p:brokerURL="tcp://localhost:61616"/>

声明消息的目的地

队列

Java配置

@Bean
public ActiveMQQueue queue() {
    ActiveMQQueue queue = new ActiveMQQueue();
    queue.setPhysicalName("mvc.queue");
    return queue;
}

XML配置

<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue" c:_="mvc.queue"/>

主题

Java配置

@Bean
public ActiveMQTopic topic() {
    ActiveMQTopic topic = new ActiveMQTopic();
    topic.setPhysicalName("mvc.topic");
    return topic;
}

XML配置

<bean id="topic" class="org.apache.activemq.command.ActiveMQTopic" c:_="mvc.topic"/>

使用传统JMS方式发送和接受消息

public void sendMsg() throws Exception {
    Connection conn = new ActiveMQConnectionFactory("tcp://localhost:61616");
    Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Destination destination = new ActiveMQQueue("mvc.queue");
    MessageProducer producer = session.createProducer(destination);
    TextMessage message = session.createTextMessage();
    message.setText("hello");
    producer.send(message);
    session.close();
    conn.close();
}
public void receiveMsg() throws Exception {
    Connection conn = new ActiveMQConnectionFactory("tcp://localhost:61616");
    conn.start();
    Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Destination destination = new ActiveMQQueue("mvc.queue");
    MessageConsumer consumer = session.createConsumer(destination);
    TextMessage message = (TextMessage) consumer.receive();
    System.out.println(message.getText());
    session.close();
    conn.close();
}

定义JmsTemplate对象
Java配置

@Bean
public JmsTemplate jmsTemlate(ConnectionFactory connectionFactory, ActiveMQQueue queue) {
    JmsTemplate template = new JmsTemplate(connectionFactory);
    template.setDefaultDestination(queue);
    return template;
}

XML配置

<bean id="jmsTemlate" class="org.springframework.jms.core.JmsTemplate" c:_-ref="connectionFactory" p:defaultDestination="queue"/>

使用JMS模板方式发送和接受消息

public void sendMsg() {
    jmsOperations.send(new MessageCreator() {
        @Override
        public Message createMessage(Session session) throws JMSException {
            TextMessage message = session.createTextMessage();
            message.setText("Hello Jms.");
            return message;
        }
    });
}
public void receiveMsg() throws JMSException {
    TextMessage message = (TextMessage) jmsOperations.receive();
    System.out.println(message.getText());
}

使用Convert

public void sendMsg() {
    jmsOperations.convertAndSend("Hello");
}
public void receiveMsg() {
    String message = (String) jmsOperations.receiveAndConvert();
    System.out.println(message);
}

待续...

以上是关于ActiveMQ发送消息的主要内容,如果未能解决你的问题,请参考以下文章

php ActiveMQ的发送消息,与处理消息

ActiveMQ消息队列的使用及应用

ActiveMQ---ActiveMQ原理分析之消息发送

SpringMVC+ActiveMQ发送消息并接收返回值的问题

学习ActiveMQ:JMS消息的确认与重发机制

ActiveMQ发送消息