RabbitMQ(二)Hello World

本文介绍了如何使用RabbitMQ实现消息队列的简单应用,包括生产者发送消息和消费者接收并打印消息的流程。通过Java客户端库amqp-client操作,展示了创建连接、发送和接收消息的代码示例。

本例。发送单个消息的生产者和接收消息并打印的消费者。

生产者发送消息,消费者接收消息,发送的消息进入消息缓存队列中。

发消息
接收消息
生产者
消息队列hello
消费者

2.1依赖

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

<!--        操作文件流的依赖-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

2.2消息产生者

代码

package com.example.demo01;

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

import java.io.IOException;

/**
 * @author 我见青山多妩媚
 * @date Create on 2022/8/14 0:25
 * 生产者:发消息
 */
public class Producer {
    //队列名称
    public static final String QUEUE_NAME = "hello";

    //发消息
    public static void main(String[] args) throws IOException {
        //创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置工厂ip--> 便于连接rabbitmq的队列
        factory.setHost("ip地址");
        //设置用户名
        factory.setUsername("username");
        //设置密码
        factory.setPassword("password");

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

        //获取信道
        Channel channel = connection.createChannel();
        /*
            产生队列(可以不适用交换机)
            参数:
            1、队列名称
            2、队列内消息是否持久化(保存消息)(磁盘),默认存储在内存中(false)
            3、该队列是否只供一个消费者进行消费 是否进行消息的共享 true:可以多个消费者消费,false:只能一个
            4、是否自动删除,最后一个消费者断开连接之后,该队列是否自动删除,true:自动删除,false:不自动删除
            5、其他参数(先不了解)
         */
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        //消息内容
        String message = "hello world";

        /*
            发布消息
            参数:
            1、发送到哪个交换机(此处不用)
            2、路由key值 本次是队列名称
            3、其他参数
            4、发送的消息,需要转成字节
         */
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        System.out.println("消费发送完毕");
    }
}

运行结果:

消费发送完毕

之后,去对应的ip:15672下登录查看,

image-20220814010124472

可以看到消费已经发出

2.3消息消费者

package com.example.demo01;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.Arrays;

/**
 * @author 我见青山多妩媚
 * @date Create on 2022/8/14 14:40
 * 消费者  接收消息
 */
public class Consumer {
    //队列名称
    public static final String QUEUE_NAME = "hello";
    //接收消息
    public static void main(String[] args) throws Exception {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("101.43.254.109");
        factory.setUsername("root");
        factory.setPassword("5262413645.mm");

        Connection connection = factory.newConnection();

        Channel channel = connection.createChannel();

        /*
            接收消息
            参数:
            1、队列名称
            2、应答方式(自动应答true、手动应答false),为了方便此处用自动应答
            3、消费者成功消费的回调, 是一个函数式接口,lambda表达式
            4、消费者消费失败的回调
         */
        //声明:成功消费时的回调函数
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            //打印消息内容
            System.out.println(new String(message.getBody()));
        };

        //声明:消费失败时的回调函数
        CancelCallback cancelCallback = consumerTag ->{
            System.out.println("消费消息中断");
        };
        
        //消费消息
        channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
        
    }
}

运行结果:

hello world

注意:

该方法只有在rabbitmq 5.7.3以上的版本才有

 /*          
    参数:
    1、队列名称
    2、应答方式(自动应答true、手动应答false),为了方便此处用自动应答
    3、消费者成功消费的回调, 是一个函数式接口,lambda表达式
    4、消费者消费失败的回调
 */
String basicConsume(String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallback cancelCallback) throws IOException;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值