RabbitMQ入门(下载、安装、java测试案例)

6 篇文章 0 订阅
1 篇文章 0 订阅

RabbitMQ,先来一个helloworld

1. 下载、安装

copy前辈的博客,转载
https://www.cnblogs.com/bigberg/p/8127032.html
https://www.cnblogs.com/saryli/p/9729591.html
补充:

  1. rabbitmq是由erlang语言开发的,安装依赖erlang语言
  2. rabbitmq是作为Windows的服务运行在后台的,
  3. rabbit进程在Windows的任务管理器位置:
    rabbit进程在Windows的任务管理器位置
  4. rabbitmq服务在Windows管理服务中的位置:桌面计算机图标右键–> 管理 --> 服务和应用程序 --> 服务
    rabbitmq是自动启动的,可以设置为手动,节约资源,杜绝浪费
    rabbitmq服务在Windows管理服务中的位置

2. java测试案例

一个连接工具类,一个数据生产者,一个数据消费者
测试案例参考:https://blog.csdn.net/kavito/article/details/91403659

通过maven引入依赖
    <dependencies>
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.7.1</version>
        </dependency>
    </dependencies>
工具类
package org.monkey.rabbitmq;

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

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

public class RabbitMqUtil {
    public static Connection getConnection () {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("localhost");
        connectionFactory.setPort(5672);
        try {
            return connectionFactory.newConnection();
        } catch (IOException e) {
            throw new RuntimeException("IOException", e);
        } catch (TimeoutException e) {
            throw new RuntimeException("TimeoutException", e);
        }
    }
}
数据生产者
package org.monkey.rabbitmq;

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

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

public class Send {
    private final static String QUEUE_NAME = "test_queue";
    
    public static void main(String[] args) {
        Connection connection = null;
        Channel channel = null;
        try {
            // 1、获取到连接
            connection = RabbitMqUtil.getConnection();
            // 2、从连接中创建通道,使用通道才能完成消息相关的操作
            channel = connection.createChannel();
            // 3、创建队列
            /* 参数说明
             * String queue 队列名称
             * boolean durable 是否持久化,如果持久化,mq重启后队列还在
             * boolean exclusive 是否独占连接,队列只允许在该连接中访问,如果connection连接关闭队列则自动删除,如果将此参数设置true可用于临时队列的创建
             * boolean autoDelete 自动删除,队列不再使用时是否自动删除此队列,如果将此参数和exclusive参数设置为true就可以实现临时队列(队列不用了就自动删除)
             * Map<String, Object> arguments 参数,可以设置一个队列的扩展参数,比如:可设置存活时间
             */
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            // 4、消息内容
            String message = "Hello World!";
            // 向指定的队列中发送消息
            /* 参数明细:
             * String exchange,交换机,如果不指定将使用mq的默认交换机(设置为"")
             * String routingKey,路由key,交换机根据路由key来将消息转发到指定的队列,如果使用默认交换机,routingKey设置为队列的名称
             * BasicProperties props,消息的属性
             * byte[] body,消息内容
             */
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" Sent '" + message + "'");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 5、关闭通道和连接
            try {
                if (channel != null){
                    channel.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TimeoutException e) {
                e.printStackTrace();
            }
        }
    }
}
数据消费者
package org.monkey.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Recv {
    private final static String QUEUE_NAME = "test_queue";
    
    public static void main(String[] args) throws IOException {
        // 1、获取到连接
        Connection connection = RabbitMqUtil.getConnection();
        // 2、创建会话通道,生产者和mq服务所有通信都在channel通道中完成
        Channel channel = connection.createChannel();
        // 3、创建队列
        /* 参数明细
         * String queue 队列名称
         * boolean durable 是否持久化,如果持久化,mq重启后队列还在
         * boolean exclusive 是否独占连接,队列只允许在该连接中访问,如果connection连接关闭队列则自动删除,如果将此参数设置true可用于临时队列的创建
         * boolean autoDelete 自动删除,队列不再使用时是否自动删除此队列,如果将此参数和exclusive参数设置为true就可以实现临时队列(队列不用了就自动删除)
         * Map<String, Object> arguments 参数,可以设置一个队列的扩展参数,比如:可设置存活时间
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 4、实现消费方法
        DefaultConsumer consumer = new DefaultConsumer(channel){
            // 获取消息,并且处理,这个方法类似事件监听,如果有消息的时候,会被自动调用
            /** 当接收到消息后此方法将被调用
             * @param consumerTag  消费者标签,用来标识消费者的,在监听队列时设置channel.basicConsume
             * @param envelope 信封,通过envelope
             * @param properties 消息属性
             * @param body 消息内容
             * @throws IOException
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 交换机
                String exchange = envelope.getExchange();
                // 消息id,mq在channel中用来标识消息的id,可用于确认消息已接收
                long deliveryTag = envelope.getDeliveryTag();
                // body 即消息体
                String msg = new String(body,"utf-8");
                System.out.println("Received : " + msg + "!");
            }
        };
    
        // 监听队列,第二个参数:是否自动进行消息确认。
        /* 参数明细:
         * String queue 队列名称
         * boolean autoAck 自动回复,当消费者接收到消息后要告诉mq消息已接收,如果将此参数设置为tru表示会自动回复mq,如果设置为false要通过编程实现回复
         * Consumer callback,消费方法,当消费者接收到消息要执行的方法
         */
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}
运行

生产者
在这里插入图片描述
消费者
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值