activemq实现了哪些协议_老牌中间件ActiveMQ

—— ActiveMQ入门 ——

Apache ActiveMQ™是最流行的开源、多协议、基于java的消息传递服务器。它支持行业标准协议,因此用户有多种语言和平台的客户端可以选择。可以连接到C、C++、Python、. net、java等语言。使用无处不在的AMQP协议集成多平台应用程序。在websockets上的在web应用程序之间交换消息。使用MQTT管理您的物联网设备。支持您现有的JMS基础结构及其他内容。ActiveMQ提供了支持任何消息传递用例的强大和灵活性。

目前ActiveMQ有两种“口味”——“经典”5.x broker和“下一代”Artemis broker。一旦Artemis达到了与5.x等值的足够水平的功能。它将成为ActiveMQ 6。

1.ActiveMQ是什么?

它是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件,通过中间件我们可以实现异步调用、流量削峰等。

2.ActiveMQ安装

1) 将 apache-activemq-5.15.11-bin.tar.gz 上传到服务器

2) 解压 tar -zxvf apache-activemq-5.15.11-bin.tar.gz

aa370f26f0143678fc20d347087520f5.png

3) 启动

进到bin目录

  ./activeMQ start    ./activeMQ status  ./activemq console  hostnamectl set-hostname  Java  ./activemq start
<dependency>    <groupId>org.apache.activemqgroupId>    <artifactId>activemq-allartifactId>    <version>5.15.9version>dependency>
3.一对一
package com.zero.day1;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/** * ActiveMQ测试类 Hello World */public class Demo1 {    public static void main(String[] args) {        Demo1.producerQuene();    }    public static void producerQuene (){        try {            // Create a ConnectionFactory 创建工厂连接对象            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");            // Create a Connection 使用连接工厂创建一个连接对象            Connection connection = connectionFactory.createConnection();            connection.start();            // Create a Session 创建会话session对象            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            // create the destination (Topic or Quene) 创建目标对象(一对一or一对多)            Destination destination = session.createQueue("TEST.FOO1");            // Create a MessageProducer from the Session to the Topic or Quene 创建生产者对象            MessageProducer producer = session.createProducer(destination);            String text = "hello world";            // create a messages 创建一个消息对象            TextMessage message = session.createTextMessage(text);            // tell the producer to send the message 发送消息            producer.send(message);            System.out.println("发送成功");            // clean up 关闭资源            session.close();            connection.close();        } catch (Exception e) {            System.out.println("Caught" + e);            e.printStackTrace();        }    }}public static  void consumerQuene () {        try {            // create a connectionFactory 创建工厂连接对象            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");            // create a connection 使用连接工厂创建一个连接对象            Connection connection = connectionFactory.createConnection();            connection.start();            //create a session 创建会话session对象            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            // create the destination(Topic or Quene) 创建目标对象(一对一or一对多)            Destination destination = session.createQueue("TEST.FOO1");            // create a MessageConsumer from the session to the Topic or Quene 创建消费者对象            MessageConsumer consumer = session.createConsumer(destination);            // wait for a message 创建一个消息对象            Message message = consumer.receive(1000);            if (message instanceof TextMessage) {                TextMessage textMessage = (TextMessage) message ;                String text = textMessage.getText();                System.out.println("Received: " + text);            } else {                System.out.println("Received: " + message);            }            consumer.close();            session.close();            connection.close();        } catch (Exception e) {            System.out.println("Caught: " + e);            e.printStackTrace();        }    }
4.一对多
package com.zero.day2;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/** * 使用ActiveMQ操作一对多消息通信 */public class ProducerDemo {    public static void main(String[] args) {        ProducerDemo.topicProducer();    }    public static void topicProducer () {        try {            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");            Connection connection = connectionFactory.createConnection();            connection.start();            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            Topic topic = session.createTopic("myTopic");            MessageProducer producer = session.createProducer(topic);            TextMessage textMessage = session.createTextMessage("hello");            producer.send(textMessage);            System.out.println("消息已经发送: " + textMessage.getText());            producer.close();            session.close();            connection.close();        } catch (Exception e) {            System.out.println("Caught" + e);            e.printStackTrace();        }    }}package com.zero.day2;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class ConsumerDemo {    public static void main(String[] args) {        ConsumerDemo.topicConsumer();    }    public static void topicConsumer () {        try {            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");            Connection connection = connectionFactory.createConnection();            connection.start();            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);            Topic topic = session.createTopic("myTopic");            MessageConsumer consumer = session.createConsumer(topic);            consumer.setMessageListener(new MessageListener() {                public void onMessage(Message message) {                    if(message instanceof TextMessage){                        TextMessage textMessage = (TextMessage)message;                        try {                            System.out.println(textMessage.getText());                        } catch (JMSException e) {                            e.printStackTrace();                        }                    }                }            });            System.in.read();            consumer.close();            session.close();            connection.close();        } catch (Exception e) {            System.out.println("Caught: " + e);            e.printStackTrace();        }    }}

—— spring整合activemq ——

1.添加Spring依赖

<dependency>     <groupId>org.springframeworkgroupId>     <artifactId>spring-contextartifactId>dependency>

2.spring的配置文件 application.xml

<?xml  version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="getConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">        <property name="brokerURL" value="tcp://127.0.0.1:61616" />    bean>        <bean id="connectionFactory"          class="org.springframework.jms.connection.SingleConnectionFactory">                <property name="targetConnectionFactory" ref="getConnectionFactory" />    bean>            <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">                <property name="connectionFactory" ref="connectionFactory" />    bean>        <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">        <constructor-arg>            <value>spring-queue-demovalue>        constructor-arg>    bean>            <bean id="queueConsumer" class="com.zero.day3.QueueConsumer" />        <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">        <property name="connectionFactory" ref="connectionFactory" />        <property name="destination" ref="queueDestination" />        <property name="messageListener" ref="queueConsumer" />    bean>beans>

3.生产者

package com.zero.day3;import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import javax.jms.*;/** * spring整合ActiveMQ 生产者 */public class QueueProducer{    public static void main(String[] args) {            QueueProducer queueProducer = new QueueProducer();            queueProducer.producerQueue();    }    public  void producerQueue () {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);        Destination queueDestination = (Destination)context.getBean("queueDestination");        jmsTemplate.send(queueDestination, new MessageCreator() {            public Message createMessage(Session session) throws JMSException {                TextMessage textMessage = session.createTextMessage();                textMessage.setText("hello  spring整合actviceMQ");                System.out.println("生产者启动成功,发送的消息为:" + textMessage.getText());                return textMessage;            }        });    }}

4.消费者

package com.zero.day3;import org.springframework.context.support.ClassPathXmlApplicationContext;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;import javax.xml.soap.Text;import java.io.IOException;/** * spring整合ActviceMQ 消费者 */public class QueueConsumer implements MessageListener {    public void onMessage(Message message) {        TextMessage textMessage = (TextMessage)message;        try {            System.out.println("消费者接收到的消息:" + textMessage.getText());        } catch (JMSException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        //初始化spring容器        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");        //等待        try {            System.in.read();        } catch (IOException e) {            e.printStackTrace();        }    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值