栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

rabbitmq简单队列模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

rabbitmq简单队列模式

1.Queues

  • Virtual host 隔离目录
  • name 队列名字
  • type 类型
  • Features 【D代表是一个持久态的队列,服务宕机或重启后队列依然存在】
  • state 就绪状态
  • Ready 待消费的消息总数
  • total 消息总条数
  • Unacked 待应答的消息总数
点击queue1进入下一个页面


1.1 overview 查看当前队列基本运行状况和条目数,占用空间,持久化状态,内存状况

1.2 consumers 是否有消费者进行消费

1.3 bindings 绑定的交换机和路由key,如果队列没有绑定任何交换机则会绑定默认交换机


1.4 publish message 发送消息(持久化和非持久化发送)

  • 持久化后发送消息会立刻被存盘
  • 非持久化重启后队列会被清空


1.5 get message 获取消息

  • Nack 预览获取消息
  • ack 获取消息消费并且应答,生产环境慎用

1.6 move message 移动消息

1.7 delede、purge删除和清空队列

1.8 runtime metrics 运行队列的基本内存状况和占用磁盘大小

2.Exchanges

  • AMQP default 没有绑定任何交换机的队列默认绑定到此交换机
  • direct 路由模式
点击AMQP进入下一个页面

  • routing key 发送至哪个queue
  • payload 发送内容
发送一条消息至队列

  • 点击队列查看收到的条数

  • 右上角可以设置刷新频率
在get message中查看消息
  • message 可以指定取出的条数

  • nack获取后队列中条数依然存在

  • ack获取后队列中消息消失

代码实现
  • maven依赖
        
            com.rabbitmq
            amqp-client
            5.10.0
        
  • producer
package com.zq.rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;


public class Producer {

    public static void main(String[] args) {

        //创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("ip地址");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("密码");
        connectionFactory.setVirtualHost("/");
        //创建连接connection
        Connection connection = null;
        Channel channel = null;
        try {
            connection = connectionFactory.newConnection("生产者");
            channel = connection.createChannel();
            String queueName = "queue2";
             
            channel.queueDeclare(queueName, true, false, false, null);

            String message = "hello rabbitmq!";
            //第一个参数为交换机,没有则会使用默认交换机
            channel.basicPublish("", queueName, null, message.getBytes());
            System.out.println("消息发送成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(channel != null && channel.isOpen()){
                try {
                    channel.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

            if(connection != null && connection.isOpen()){
                try {
                    connection.close();
                }catch (Exception e){
					e.printStackTrace();
                }
            }
        }

        //创建连接获取通道channel   
        //创建交换机,队列,绑定关系,路由key,发送消息,接收消息
        //准备消息
        //发送消息给队列queue
        //关闭连接
        //关闭通道
    }
}

  • consumer
package com.zq.rabbitmq.simple;

import com.rabbitmq.client.*;

import java.io.IOException;


public class Consumer {

    public static void main(String[] args) {

        //创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("ip地址");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("密码");
        connectionFactory.setVirtualHost("/");
        //创建连接connection
        Connection connection = null;
        Channel channel = null;
        try {
            connection = connectionFactory.newConnection("生产者");
            channel = connection.createChannel();
            String queueName = "queue2";
            channel.basicConsume(queueName, true, new DeliverCallback() {
                @Override
                public void handle(String s, Delivery delivery) throws IOException {
                    System.out.println("收到的消息是" + new String(delivery.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                @Override
                public void handle(String s) throws IOException {
                    System.out.println("消息接受失败...");
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(channel != null && channel.isOpen()){
                try {
                    channel.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

            if(connection != null && connection.isOpen()){
                try {
                    connection.close();
                }catch (Exception e){
					e.printStackTrace();
                }
            }
        }
    }
}

  • rabbitmq基于channel处理,connection短链接三次握手四次挥手耗时长,所以做了长链接,通过信道 channel来处理消息,性能高
  • 非持久化队列也会存盘,但是重启服务会丢失
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876995.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号