RabbitMQ入门案例

1:jdk1.8
2:构建一个maven工程
3:导入rabbitmq的maven依赖
4:启动rabbitmq-server服务
5:定义生产者
6:定义消费者
7:观察消息的在rabbitmq-server服务中的过程

1、导入依赖

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

2、RabbitMQ服务

docker start myrabbit

3、定义生产者

package com.sky.rabbitmq.simple;

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

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author 尹稳健~
 * @version 1.0
 */
public class Producer {
    public static void main(String[] args){
        // 所有的中间件技术都是基于tcp/ip协议基础之上构建新型的协议规范,只不过RabbitMQ遵循的是amqp
        // ip port

        // 1:创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // ip
        connectionFactory.setHost("localhost");
        // 端口不是管理界面的端口
        connectionFactory.setPort(5672);
        // 登录账号
        connectionFactory.setUsername("admin");
        // 登录密码
        connectionFactory.setPassword("admin");
        // 访问路径根节点
        connectionFactory.setVirtualHost("/");
        Connection connection = null;
        Channel channel = null;
        // 2:创建连接connection
        try {
            connection = connectionFactory.newConnection("生产者");
            // 3:通过连接获取通道channel
            channel = connection.createChannel();
            // 4:通过创建交换机,声明队列,绑定关系,路由key,发送消息和接收消息
            String queueName = "queue1";
            /**
             * @param1 队列的名称
             * @param2 是否要持久化durable=false 所谓持久化消息是否存盘,
             * @param3 排他性,是否是独占队列
             * @param4 auto-delete 是否自动删除,随着最后一个消费者消息完毕信息以后是否删除队列
             *          如果设置为不删除 那么第二次创建队列会报错,不能出现相同名字的队列
             * @param5 附带附属参数
             */
            channel.queueDeclare(queueName,false,false,true,null);
            // 5:准备消息内容
            String message = "HelloWorld";
            // 6:发送消息给队列queue 这里空字符串,是一个交换机
            channel.basicPublish("",queueName,null,message.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }finally {
            // 7:关闭连接
            if (channel!=null && channel.isOpen()){
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }
            }
            // 8:关闭通道
            if (connection!= null){
                try {
                    connection.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4、消费者

package com.sky.rabbitmq.simple;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author 尹稳健~
 * @version 1.0
 */
public class Consumer {
    public static void main(String[] args) {
        // 所有的中间件技术都是基于tcp/ip协议基础之上构建新型的协议规范,只不过RabbitMQ遵循的是amqp
        // ip port

        // 1:创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // ip
        connectionFactory.setHost("localhost");
        // 端口不是管理界面的端口
        connectionFactory.setPort(5672);
        // 登录账号
        connectionFactory.setUsername("admin");
        // 登录密码
        connectionFactory.setPassword("admin");
        // 访问路径根节点
        connectionFactory.setVirtualHost("/");
        Connection connection = null;
        Channel channel = null;
        // 2:创建连接connection
        try {
            connection = connectionFactory.newConnection("消费者");
            // 3:通过连接获取通道channel
            channel = connection.createChannel();
            // 4:通过创建交换机,声明队列,绑定关系,路由key,发送消息和接收消息
            String queueName = "queue1";
            /**
             * @param1 队列的名称
             * @param2 是否要持久化durable=false 所谓持久化消息是否存盘,
             * @param3 排他性,是否是独占队列
             * @param4 auto-delete 是否自动删除,随着最后一个消费者消息完毕信息以后是否删除队列
             *         如果设置为不删除 那么第二次创建队列会报错,不能出现相同名字的队列
             * @param5 附带附属参数
             */
            channel.queueDeclare(queueName,false,false,true,null);
            // 5:准备消息内容
            String message = "HelloWorld";
            // 6:发送消息给队列queue
            channel.basicConsume("queue1", true, new DeliverCallback() {
                public void handle(String s, Delivery delivery) throws IOException {
                    System.out.println("收到消息是" + new String(delivery.getBody(),"UTF-8"));
                }
            }, new CancelCallback() {
                public void handle(String s) throws IOException {
                    System.out.println("接收消息失败。。。");
                }
            });

            System.out.println("开始接收消息");
            System.in.read();

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

5、测试

执行发送

运行生产者

在这里插入图片描述

接收

在这里插入图片描述

关闭consumer后队列删除

在这里插入图片描述

6、图解


在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ是一款使用Erlang语言开发的开源消息中间件,它实现了AMQP(高级消息队列协议)。RabbitMQ具有以下特点: 1. 可靠性:支持持久化、传输确认和发布确认等机制,确保消息的可靠性。 2. 灵活的消息分发策略:通过Exchange(交换机)进行路由消息,支持简单模式、工作队列模式、发布订阅模式、路由模式和通配符模式等多种分发策略。 3. 支持集群:多台RabbitMQ服务器可以组成一个集群,形成一个逻辑的Broker。 4. 多种协议:RabbitMQ支持多种消息队列协议,如STOMP、MQTT等。 5. 多种语言客户端:RabbitMQ几乎支持所有常用编程语言,包括Java、.NET、Ruby等。 6. 可视化管理界面:RabbitMQ提供了一个易用的用户界面,方便用户监控和管理消息Broker。 7. 插件机制:RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。 要入门RabbitMQ,您可以按照以下步骤: 1. 安装RabbitMQ:根据操作系统的不同,您可以按照相应的方式进行安装。例如,在Windows 10系统中,您可以通过双击rabbitmq-server.bat启动脚本来启动RabbitMQ。 2. 学习基础概念:了解什么是消息队列以及为什么使用消息队列。 3. 学习RabbitMQ的特点和组成部分:深入了解RabbitMQ的可靠性、消息分发策略等特点。 4. 学习RabbitMQ的工作流程:了解消息在RabbitMQ中的传递和处理过程。 5. 完成一个HelloWorld小案例:尝试使用RabbitMQ发送和接收简单的消息,以便熟悉RabbitMQ的基本用法。 6. 学习RabbitMQ交换机的四种类型的特点和使用方法:了解直连交换机、扇形交换机、主题交换机和头交换机的不同特点和使用场景。 通过以上步骤,您可以初步入门RabbitMQ,并开始使用它进行消息传递和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕竟尹稳健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值