RabbitMQ学习(三)——入门体验

一、角色分类

总共分为5种角色,每个角色对应不同的权限信息

  • none 啥也干不了,也无法登陆到图形化界面

不能访问 management plugin

  • management 普通管理员 相当于个人中心,只查看自己的相关节点信息

列出自己可以通过AMQP登陆的虚拟机

查看自己的虚拟机节点virtual hosts的queues,exchange 和bindings信息

查看和关闭自己的channels 和 connections

查看有关自己的虚拟机节点virtual hosts的统计信息,包括其他用户在该节点virtual hosts的活动信息

  • policymaker 策略制定者 在个人中心基础上,可以管理 (创建、删除) 自己的虚拟机节点和参数信息

包含management所有权限

查看和创建和删除自己的virtual hosts所属的policies 和 parameters信息

  • monitoring 管理员一样,除了看自己的还是看别人的,但是只能看,不能操作别人的

包含management所有权限

罗列出所有virtual hosts,包括不能登陆的virtual hosts

查看其他用户的connections和channels使用情况

查看所有的virtual hosts的全局统计信息

  • administrator 超级管理员 顶级管理员,可登陆控制台、查看所有信息、可对 rabbitmq进行管理 (全部)

最高权限

可以创建和删除virtual hosts

可以查看,创建和删除users 查看创建permisssions 关闭所有用户的connections

二、入门体验

实现步骤:

  • 环境jdk1.8

  • 构造一个maven工程

  • 导入RabbitMQ依赖

  • 启动RabbitMQ-server服务

  • 定义生产者

  • 定义消费者

  • 观察消息在rabbitmq-server服务中的过程

模式:生产者==> 通道 ==> 消费者

添加rabbitmq依赖

        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.7.3</version>
        </dependency>

创建两个类:Producer和Consumer

Producer类

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //所有的中间件技术都是基于tcp/ip协议基础之上构建新的协议规范,只不过rabbitmq遵循的是amqp
        //1.创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("你的ip地址");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");
        Connection connection=null;
        Channel channel =null;
        try {
            //2.创建连接Connection
            connection = connectionFactory.newConnection("生产者");
            //3.通过连接获取通道Channel
            channel =connection.createChannel();
            //4.通过创建交换机,声明队列,绑定关系,路由key,发送消息和接收消息。
            String queueName= "queue1";
            /*
            @params1:队列名字
            @params2:是否要持久化,即是否存盘
            @params3:排他性,是否独占
            @params4:当最后一个消费者消息完毕以后是否把队列自动删除
            @params5:携带附加信息
             */
            channel.queueDeclare(queueName,false,false,false,null);
            //5.准备消息内容
            String message = "Hello RabbitMQ";
            //6.发送消息给队列queue
            channel.basicPublish("",queueName,null,message.getBytes());
            System.out.println("发送成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }finally {
            //7.关闭连接
            if (channel!=null&&channel.isOpen()){
                channel.close();
            }
            if (connection!=null&& connection.isOpen()){
                connection.close();
            }
            //8.关闭通道
        }

    }
}

Consumer类

public class Consumer {
    public static void main(String[] args) {
        //所有的中间件技术都是基于tcp/ip协议基础之上构建新的协议规范,只不过rabbitmq遵循的是amqp
        //1.创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("你的IP地址");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");
        Connection connection=null;
        Channel channel =null;
        try {
            //2.创建连接Connection
            connection = connectionFactory.newConnection("消费者");
            //3.通过连接获取通道Channel
            channel =connection.createChannel();
            //4.通过创建交换机,声明队列,绑定关系,路由key,发送消息和接收消息。
           channel.basicConsume("queue1", true, new DeliverCallback() {
               @Override
               public void handle(String s, Delivery message) throws IOException {
                   System.out.println("收到消息====>" + new String(message.getBody(), "UTF-8"));
               }
           }, new CancelCallback() {
               @Override
               public void handle(String s) throws IOException {
                   System.out.println("接收失败了。。。。");
               }
           
        });

        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }finally {
            //7.关闭连接
//            if (channel!=null&&channel.isOpen()){
//                channel.close();
//            }
//            if (connection!=null&& connection.isOpen()){
//                connection.close();
//            }
            //8.关闭通道
        }

    }
}

先运行生产者的代码,然后我们可以在rabbitmq的管理页面看到生成一个队列,在连接选项卡可以看到一个生产者已连接

 

然后运行消费者的代码,可以看到队列中的资源已经被消费,在连接选项卡可以看到、新增一个消费者已连接

 

 

以上就是RabbitMQ的入门案例 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值