zoukankan      html  css  js  c++  java
  • 【Java Web开发学习】Spring消息-ActiveMQ发送消息

    ActiveMQ发送消息

    转载:http://www.cnblogs.com/yangchongxing/p/9042401.html

    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);
    }

    待续...

  • 相关阅读:
    【bzoj4372】烁烁的游戏 动态点分治+线段树
    【bzoj3730】震波 动态点分治+线段树
    【bzoj3125】CITY 插头dp
    【bzoj2310】ParkII 插头dp
    【bzoj1187】[HNOI2007]神奇游乐园 插头dp
    【bzoj1814】Ural 1519 Formula 1 插头dp
    【loj2325】「清华集训 2017」小Y和恐怖的奴隶主 概率dp+倍增+矩阵乘法
    【bzoj3518】点组计数 欧拉函数(欧拉反演)
    【bzoj5099】[POI2018]Pionek 双指针法
    【bzoj4311】向量 线段树对时间分治+STL-vector维护凸包
  • 原文地址:https://www.cnblogs.com/yangchongxing/p/9042401.html
Copyright © 2011-2022 走看看