RabbitMQ 消息队列搭建与发送简单消息

本贴最后更新于 1948 天前,其中的信息可能已经时移俗易

本文主要介绍消息队列的基本应用 demo 其他请移步至消息队列应用场景

RabbitMQ 下载官网进行下载

image.png

image.png

image.png

下载后还必须下载并搭建 Erlang 环境 因为 RabbitMQ 是基于 Erlang 开发的

image.png

下载完成之后

image.png

先安装并配置 Erlang 环境

一直点击下一步即可 都是默认

打开环境变量 在 path 后添加你的安装目录 + /bin (可以看到消息队列环境搭建就不上图了)

安装 RabbitMQ 同 Erlang 一样 都是只用点击下一步即可

重点

安装完成后 win+R 进入cmd 再进入你安装RabbitMQ 下的目录 下的/sbin

image.png

接着输入 rabbitmq-plugins enable rabbitmq_management 进行 配置

完成后如下
image.png

注意

此时百分之 99 的人进不去如下这个页面
image.png

你还需要 显示隐藏的文件夹 再进入你的 C:\Users\你的用户名\AppData\Roaming\RabbitMQ\db
将该文件夹下的所有文件删除 删除后再此执行下面程序
image.png

之后进入 安装 RabbitMQ 的目录下 sbin
image.png
双击运行
等待 等待 等待
image.png

  • 浏览器访问 http://localhost:15672/
    输入 guest 密码与用户名相同

简单的消息队列 Demo

  • 创建 maven 项目
  • pom.xml 添加
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.7.2</version>
        </dependency>

  • 创建生产者实例
public static void main(String[] args) {
	// 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
	// 设置端口
        factory.setHost("localhost");
        factory.setVirtualHost("/");
        // 用户名 密码
	factory.setUsername("guest");
        factory.setPassword("guest");

        try {
            Connection connection = factory.newConnection();
            //Connection 来创建 Channel
	    Channel channel = connection.createChannel();
            for (int i = 0 ; i < 10 ; i++){
	        //生产模式中多为 json 格式
                String msg = "Rabbit消息"+i;
                channel.basicPublish("", "NiuMsg", null, msg.getBytes());
                Thread.sleep(1000);
            }
            if (channel != null){
                channel.close();
                connection.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }
  • 创建消费者实例(接受消息)
public static void main(String[] args) throws Exception{
        //1. 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");

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

        //3. 通过 Connection 来创建 Channel
        Channel channel = connection.createChannel();

        //4. 声明一个队列
	//此处参数下面为大家介绍
        channel.queueDeclare("NiuMsg", true, false, false, null);

        //5. 创建消费者并接收消息
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body)
                    throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("接受到的消息 " + message);
            }
        };

        //6. 为消费者绑定队列
        channel.basicConsume("NiuMsg", true, consumer);
    }

总结运行结果

  • 队列声明 queueDeclare 的参数:第一个参数表示队列名称、第二个参数为是否持久化(true 表示是,队列将在服务器重启时生存)、第三个参数为是否是独占队列(创建者可以使用的私有队列,断开后自动删除)、第四个参数为当所有消费者客户端连接断开时是否自动删除队列、第五个参数为队列的其他参数。

  • 先运行消费者实例 然后再接着运行生产者实例

  • 消费者就会接收到生产者发送来的消息
    image.png

  • 进入 Queues NiuMsg 就会进入 running 状态 表示正在发送消息
    image.png

  • 当生产者发送完消息 Queues 中的 NiuMsg 的状态就会变为空闲状态
    image.png

  • 而在 Connection 中只要消费者一直处于接受消息状态 连接就一直会存在
    image.png

  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 361 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 有 linux 版本就更好了 😄

  • 其他回帖
  • someone
    作者

    哈哈 暂时还没有运用到生产环境中,运用到了会加的