RabbitMQ简单模式-java代码

简单模式下,还是使用默认交换机,一个队列。相当于信道与队列直连,消费者也只有一个,一个消费者从同一个队列中取走全部数据数据

生产者:

public class Producer {

    public static void main(String[] args) throws IOException, TimeoutException {

        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //主机地址;默认为 localhost
        connectionFactory.setHost("localhost");
        //连接端口;默认为 5672
        connectionFactory.setPort(5672);
        //连接用户名;默认为guest
        connectionFactory.setUsername("guest");
        //连接密码;默认为guest
        connectionFactory.setPassword("guest");
        //虚拟主机名称;默认为 /
        connectionFactory.setVirtualHost("/");

        //创建连接
        Connection connection = connectionFactory.newConnection();
        // 创建频道/信道(一个链接中包含多个信道,因为如果生产一次都要关闭一次链接太耗费资源,所以把连接更加细粒度化)
        Channel channel = connection.createChannel();

        //简单方式情况下,信道与队列直连,不用经过交换机
        // 声明(创建)队列
        /**
         * queue      参数1:队列名称
         * durable    参数2:是否定义持久化队列,当mq重启之后,还在
         * exclusive  参数3:是否独占本次连接
         *            ① 是否独占,只能有一个消费者监听这个队列
         *            ② 当connection关闭时,是否删除队列
         * autoDelete 参数4:是否在不使用的时候自动删除队列,当没有consumer时,自动删除
         * arguments  参数5:队列其它参数
         */
        channel.queueDeclare("simple_queue", true, false, false, null);

        // 要发送的信息
        String message = "你好;小兔子!";

        /**
         * 参数1:交换机名称,如果没有指定则使用默认Default Exchage
         * 参数2:路由key,简单模式可以传递队列名称
         * 参数3:配置信息
         * 参数4:消息内容
         */
        channel.basicPublish("", "simple_queue", null, message.getBytes());
        System.out.println("已发送消息:" + message);

        // 关闭资源
        channel.close();
        connection.close();

    }

}

消费者

public class Consumer {

    public static void main(String[] args) throws IOException, TimeoutException {

        //1.创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();

        //2. 设置参数
        connectionFactory.setHost("localhost");//ip  默认值 localhost
        connectionFactory.setPort(5672);//端口  默认值 5672
        connectionFactory.setUsername("guest");//用户名 默认 guest
        connectionFactory.setPassword("guest");//密码 默认值 guest
        connectionFactory.setVirtualHost("/");//虚拟机 默认值

        //3. 创建连接 Connection
        Connection connection = connectionFactory.newConnection();

        //4. 创建Channel
        Channel channel = connection.createChannel();

        //5. 创建队列Queue
        channel.queueDeclare("simple_queue", true, false, false, null);

        // 接收消息
        DefaultConsumer consumer = new DefaultConsumer(channel){
            /**
               回调方法,当收到消息后,会自动执行该方法

               1. consumerTag:标识
               2. envelope:获取一些信息,交换机,路由key...
               3. properties:配置信息
               4. body:数据
            */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag1:"+consumerTag);
                System.out.println("Exchange1:"+envelope.getExchange());
                System.out.println("RoutingKey1:"+envelope.getRoutingKey());
                System.out.println("properties1:"+properties);
                System.out.println("body1:"+new String(body));
            }
        };

         /**
            basicConsume(String queue, boolean autoAck, Consumer callback)
            参数:
                1. queue:队列名称
                2. autoAck:是否自动确认 ,类似咱们发短信,发送成功会收到一个确认消息
                3. callback:回调对象。我们这里使用回调对象打印有关信息,即调用handleDelivery方法
         */
        // 消费者类似一个监听程序,主要是用来监听消息 autoAck:true表示自动签收所监听的队列中的信息
        channel.basicConsume("simple_queue", true, consumer);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值