RabbitMq - 第二部分

创建JAVA开发环境

引入依赖

<dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>

生产者代码

第一步:创建ConnectionFactory链接工厂
第二步:获取connection链接
第三步:创建channel信道
第四步:声明队列

  • queue : 队列名称
  • durable : 是否持久化
  • exclusive :
    1.声明了exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除
    2.针对连接可见,只要是当前connection下的信道都可以访问
    3.一旦该队列被声明,其他连接无法声明相同名称的排他队列,其他连接的通道也无法绑定此队列
    4.队列即使显示声明为durable,连接断开时(注意不是信道断开)也会被自动删除
  • autoDelete : 是否自动删除
  • arguments 其它参数

第五步:发布消息

  • exchange : 交换机,不传的情况下有个默认交换机
  • routingKey : 默认交换机会通过routingKey将消息发送到对应的消息队列中
  • props : 其它参数信息
  • body : 消息内容,需要转换为字节数组
public class RabbitMqProducer {

    private static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.145.128");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123");
        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();
        /**
         * String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
         * queue : 队列名称
         * durable : 是否持久化
         * exclusive : 1.声明了exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除
         * 	2.针对连接可见,只要是当前connection下的信道都可以访问
         * 	3.一旦该队列被声明,其他连接无法声明相同名称的排他队列,其他连接的通道也无法绑定此队列
         * 	4.队列即使显示声明为durable,连接断开时(注意不是信道断开)也会被自动删除
         * 	autoDelete : 是否自动删除
         * 	arguments 其它参数
         */
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        /**
         * String exchange, String routingKey, BasicProperties props, byte[] body
         * exchange : 交换机,不传的情况下有个默认交换机
         * routingKey : 默认交换机会通过routingKey将消息发送到对应的消息队列中
         * props : 其它参数信息
         * body : 消息内容,需要转换为字节数组
         */
        channel.basicPublish("", QUEUE_NAME, null, "heihei".getBytes());
        System.out.println("消息发送完毕");
    }
}

消费者代码

第一步:创建ConnectionFactory链接工厂
第二步:获取connection链接
第三步:创建channel信道
第四步:消费消息

  • queue : 队列名称
  • autoAck : 消费成功是否自动确认
  • deliverCallback : 消费成功之后的回调
  • cancelCallback : 取消消费后的回调
public class RabbitMqConsumer {

    private static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("192.168.145.128");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("123");
        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();
        /**
         * String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallback cancelCallback
         * queue : 队列名称
         * autoAck : 消费成功是否自动确认
         * deliverCallback : 消费成功之后的回调
         * cancelCallback : 取消消费后的回调
         */
        channel.basicConsume(QUEUE_NAME, true, (s, message) -> {
            System.out.println(new String(message.getBody()));
        }, s -> {
            System.out.println(s);
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值