RabbitMQ-HelloWorld

RabbitMQ

当你成功安装好了 RabbitMQ ,非常值得庆幸,可喜可贺。

下面我们就应该开始尝试第一个 Demo 了,经典的HelloWorld 案例。

当然 在开始之前有必要 了解什么是 消息/订阅模式。这样会更加容易理解消息中间件

 

好了,开始我们的实验吧。

添加依赖

首先要创建一个 Maven 项目,然后添加 RabbitMQ 的依赖

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

代码参考 《RabbitMq 实战指南》

创建常量类

首先我们先定义 交换机、队列、路由键值 的值,放入到一个接口中

Constant.java

public interface Constant {

    /** 交换机 */
    String EXCHANGE_NAME = "exchange_demo";

    /** 路由键值 */
    String ROUTING_KEY = "routing_key";

    /** 队列名称 */
    String QUEUE_NAME = "queue_demo";

}

 

创建工具类

无论是消费者和生产者,都需要先连接上 RabbitMQ,这里会造成冗余代码,所以我们创建一个工具类

注意:请把 ip 、username、password 换成你自己的

RabbitMQConnectionUtil.java

public class RabbitMQConnectionUtil {

    /** Ip 地址 */
    private static final String IP_ADDRESS = "127.0.0.1";
    /** 固定端口 */
    private static final int PORT = 5672;
    /**  用户名 */
    private static final String USER_NAME = "root";
    /** 密码 */
    private static final String PASSWORD = "dcpnet";
    /** 连接工厂 */
    private static final ConnectionFactory connectionFactory;

    static {
        connectionFactory = new ConnectionFactory();
        connectionFactory.setHost(IP_ADDRESS);
        connectionFactory.setPort(PORT);
        connectionFactory.setUsername(USER_NAME);
        connectionFactory.setPassword(PASSWORD);
    }

    /**
     * 获取连接
     * @return 连接
     * @throws IOException IOException
     * @throws TimeoutException TimeOutException
     */
    public static Connection getConnection() throws IOException, TimeoutException {
        return connectionFactory.newConnection();    // 创建一个新的连接
    }

    /**
     * 关闭连接和信道
     * @param connection 连接
     * @param channel 信道
     */
    public static void close(Connection connection, Channel channel){
        try {
            if (channel == null) {
                channel.close();
            }
            if (connection == null){
                connection.close();
            }
        } catch (IOException | TimeoutException e) {
            e.printStackTrace();
        }
    }
}

开始之前,我们先做准备工作,让各个模块的代码更加的分工明确

创建 交换机、队列、绑定队列到交换机

▌方式一、代码创建

public class Preparation {
    public static void main(String[] args) throws Exception{
        Connection connection = RabbitMQConnectionUtil.getConnection();
        Channel channel = connection.createChannel();

        // 申明交换机
        channel.exchangeDeclare(Constant.EXCHANGE_NAME,"direct",true,false,null);
        // 声明队列
        channel.queueDeclare(Constant.QUEUE_NAME,true,false,false,null);
        // 绑定队列
        channel.queueBind(Constant.QUEUE_NAME,Constant.EXCHANGE_NAME,Constant.ROUTING_KEY);

        RabbitMQConnectionUtil.close(connection,channel);
    }
}

 运行此段代码后就成功了,可以再管理界面看到这个交换机和队列,点机队列查看详情看到也绑定成功了

 

▌方式二、管理页面创建

1.创建交换机

2.创建队列

3.绑定队列到交换机

然后跳转到

输入指定交换机和路由键值后进行绑定

 

生产者

首先我们创建一个发送消息的 ProviderClient 作为生产者客户端

ProviderClient.java

public class ProviderClient {
    public static void main(String[] args) throws Exception{
        Connection connection = RabbitMQConnectionUtil.getConnection();
        Channel channel = connection.createChannel();

        String message = "Hello,World";
        channel.basicPublish(Constant.EXCHANGE_NAME,Constant.ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());

        // 关闭信道和连接
        RabbitMQConnectionUtil.close(connection,channel);

    }
}

 上面的生产者客户端的代码首先和RabbitMQ 服务器建立一个连接 (Connection ) , 然后在这个连接之上创建一个信道(Channel) 。往指定的 交换机 的指定 路由键值 发送一条消息, 最后关闭资源。

可以进入管理页面看到 queue_demo 中多了一条消息

 

然后我们创建 消息接收者客户端

消费者

ConsumerClient.java

public class ConsumerClient {
    public static void main(String[] args) throws Exception{
        Connection connection = RabbitMQConnectionUtil.getConnection();
        Channel channel = connection.createChannel();

        channel.basicQos(1);    // 一次消费一条消息

        // 定义消费具体详情
        Consumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 显示接收到的消息
                System.out.println("Received Message : " + new String(body));
                // 确认消费信息
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        };

        // 消费消息
        channel.basicConsume(Constant.QUEUE_NAME,consumer);

        // 关闭资源
        RabbitMQConnectionUtil.close(connection,channel);
    }
}

 

运行流程

1.首先运行 ProviderClient 然后可以看到

我们创建的队列中有一条非消费的消息

 

2.运行 消息接收者客户端 ConsumerClient

可以看到控制台页相应的打印输出了

Received message :Hello world!

查看页面

队列中的消息被成功消费掉了

 

看到这里,恭喜你已经成功的对rabbitmq 有了一个初步的了解,我们一起加油吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值