RabbitMQ官方入门案例

官方提供7个案例

RabbitMQ官方链接

每个案例点击进去都会有详细讲解

helloworld-demo

导入依赖

导入依赖

        <!--RabbitMQ依赖-->
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.12.0</version>
        </dependency>

官方实例

实例地址

消息生产者

setPort(5672)

如图需要开启5672端口

详情端口参考

/**
 * @PackageName : com.rzk
 * @FileName : Send
 * @Description : 消息生产者
 * @Author : rzk
 * @CreateTime : 23/6/2021 上午12:21
 * @Version : 1.0.0
 */
public class Send {

    //定义队列名称
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("ip");
        factory.setUsername("yeb");
        factory.setVirtualHost("/yeb");
        factory.setPassword("yeb");
        factory.setPort(5672);

        try (
                //连接工厂创建连接   
                //连接会自动关闭 Connection 继承ShutdownNotifier, Closeable
                //Closeable 继承 AutoCloseable  下有close方法
                Connection connection = factory.newConnection();
                //创建信道
                Channel channel = connection.createChannel()) {
            /**
             * 绑定队列
             * 声明队列
             *  第一个参数 queue :队列名称
             *  第二个参数 durable :是否持久化
             *  第三个参数 Exclusive :排他队列,如果一个队列被声明为排他队列,该队列仅对首次声明的连接可见,并在连接断开时自动删除。
             * 这里需要注意三点:
             *      1 .排他队列是基于连接可见的,同一连接的不同通道是可以同时访问同一个连接创建的排他他队
             *      2 . ”百次“,如果一个连接已经声明了一个排他队列,其他连接是不允许建立同名的;排他队列这个与昔通队歹怀同。
             *      3 .即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除的。这种队列适用于只限于一个容户端发送读取消息的应用场景。
             * 第四个参数 Auto-delete :自动删除,如果该队列没有任何订阅的消费者的话,该队列会被自动删除。这种队列适用于临时队列
             */
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            //队列消息的生产者:发送消息
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

消息接收

/**
 * @PackageName : com.rzk.recv
 * @FileName : Recv
 * @Description : 接收
 * @Author : rzk
 * @CreateTime : 23/6/2021 上午12:22
 * @Version : 1.0.0
 */
public class Recv {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        //创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("ip");
        factory.setUsername("yeb");
        factory.setVirtualHost("/yeb");
        factory.setPassword("yeb");
        factory.setPort(5672);
        //连接工厂创建连接
        Connection connection = factory.newConnection();
        //创建信道
        Channel channel = connection.createChannel();
        //绑定队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        //监听队列消费消息
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
    }
}

启动发送消息方法

然后去RabbitMQ客户端yeb用户登录 查看是否有一个消息

启动接收消息方法

查看控制台和客户端消息有没有变为0变为0就是接收成功

到达这一步简单的例子使用成功

可以选择channel通道看看连接是否在线

这样显示是表示接收通道还处于连接状态

原文地址:https://www.cnblogs.com/rzkwz/p/14921000.html