ActiveMQ消息队列

ActiveMQ消息队列

传统调用接口:
会有是不好的通讯方式和特点,同步请求
1.网咯延迟,发生阻塞
如果在A调用B的时候,B有延迟,那么A就会一直等待,发生阻塞,等待B工程响应
2.超时,重试机制
在提交数据的时候,如果存在网络延迟,那么客户端重复点击提交,可能会产生数据不一致
3.数据不一致
就是说A提交数据,B有延迟没有拿到实时的数据,就会存在数据不一致
消息中间建
解决高并发,采用两种通讯模式,点对点p2p(简单来说就是一个对应一个),发布订阅(一对多)
点对点
在这里插入图片描述
生产这向消息队列发生消息,如果消费者不在,消息队列将会缓存
消费者存储数据到消息队列:是采用先进先出的方式(排队)

消息队列
一个生产者,对应多个消费者
在这里插入图片描述
用于消息推送
Windows安装ActiveMQ
1.解压apache-activemq-5.11.1-bin.zip
2.进入apache-activemq-5.11.1\bin\win64(电脑是64位的点击64,32的点击32)进去win64后点击activemq.bat启动第一次启动需要等以后,甭着急
3.ActiveMQ的默认地址是8161,启动完后在浏览器输入127.0.0.1:8161,你会进入下面这个页面
在这里插入图片描述
点击管理ActiveMQ会弹出一个登陆框,默认的账号密码是admin
点对点通讯
导入依赖

    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-core</artifactId>
      <version>5.7.0</version>
    </dependency>

生产者

public static void main(String[] args) throws JMSException {
        //步骤一:创建连接工厂
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
        //步骤二:创建连接
        Connection connection = activeMQConnectionFactory.createConnection();
        //步骤三:启动连接
        connection.start();
        //步骤四:获取会话工厂
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //步骤五:创建队列
        Queue queue = session.createQueue("wdksoft_queue");
        //创建消息生产者
        MessageProducer producer = session.createProducer(queue);
        //消息持久化
        producer.setDeliveryMode(2);
        //模拟消息
        TextMessage textMessage = session.createTextMessage("hello activeMQ");
        //发送消息
        producer.send(textMessage);
        System.out.println("生产者生产消息完毕~");
        //回收资源
        session.close();
        connection.close();
    }

消费者

  public static void main(String[] args) throws JMSException {
        //步骤一:创建连接工厂
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
        //步骤二:创建连接
        Connection connection = activeMQConnectionFactory.createConnection();
        //步骤三:开启连接
        connection.start();
        //创建会话对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //获取到接受消息的队列
        Queue queue = session.createQueue("wdksoft_queue");
        //创建消费者
        MessageConsumer consumer = session.createConsumer(queue);
        while(true){
            //获取消息
            TextMessage message = (TextMessage)consumer.receive();
            if(message!=null){
                System.out.println("消费者获取消息:"+message.getText());
            }else{
                break;
            }
        }
        //回收资源
        session.close();
        connection.close();
    }

4.发布订阅模式:消费者先订阅Topic制图,再生产消息

public static void main(String[] args) throws JMSException {
				//步骤一:创建连接工厂
				ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
				//步骤二:创建连接
				Connection connection = activeMQConnectionFactory.createConnection();
				//步骤三:开启连接
				connection.start();
				//创建会话对象
				Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
				//获取到接受消息的队列
				Topic topic = session.createTopic("wdksoft_topic");
				//创建消费者
				MessageConsumer consumer = session.createConsumer(topic);
				while(true){
					//获取消息
					TextMessage message = (TextMessage)consumer.receive();
					if(message!=null){
						System.out.println("消费者获取消息:"+message.getText());
					}else{
						break;
					}
				}
				//回收资源
				session.close();
				connection.close();
			}

生产者:

public static void main(String[] args) throws JMSException {
				//步骤一:创建连接工厂
				ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
				//步骤二:创建连接
				Connection connection = activeMQConnectionFactory.createConnection();
				//步骤三:启动连接
				connection.start();
				//步骤四:获取会话工厂
				Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
				//步骤五:创建主题
				Topic topic = session.createTopic("wdksoft_topic");
				//创建消息生产者
				MessageProducer producer = session.createProducer(null);
				//消息持久化
				producer.setDeliveryMode(2);
				//模拟消息
				TextMessage textMessage = session.createTextMessage("hello activeMQ pub");
				//发送消息
				producer.send(topic,textMessage);
				System.out.println("生产者生产消息完毕~");
				//回收资源
				session.close();
				connection.close();
			}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值