2、RabbitMQ简单实例

本文通过简单示例介绍了RabbitMQ作为消息服务中间件的工作方式,包括生产者、消息队列和消费者的实现,以及如何进行消息的发送与接收。重点强调了消息持久化操作的重要性,以确保程序在异常情况下仍能保持消息队列状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ 之Hello World

     
    rabbitMQ作为一个消息服务中间件负责接受消息和转发,下面给出一个简单的例子用来说明这种工作方式。
一个简单的实现主要包含3种角色生产者(Producing),消息队列(queue),消费者(consuming)。当然rabbitMQ的核心并不在于此,rabbitMQ核心主要包含Exchange、queue和binging。消息持久化操作也是通过这两个核心来完成的。后面文章会有详细说明,现在先看一下简单的消息队列实现的例子。
 

    生产者 Send.java
importcom.rabbitmq.client.Channel;
importcom.rabbitmq.client.Connection;
importcom.rabbitmq.client.ConnectionFactory;
 
 
publicclassSend {
 
    //消息队列名称
    privatefinalstatic String QUEUE_NAME="hello";
     
    publicstaticvoid main(String[] args)  throwsjava.io.IOException{
         
        //创建链接工程
        ConnectionFactory factory = newConnectionFactory();
        factory.setHost("localhost");
        //创建链接
        Connection connection = factory.newConnection();
         
        //创建消息通道
        Channel channel = connection.createChannel();
         
        //生命一个消息队列
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
         
        String message = "Hello World";
         
        //发布消息,第一个参数表示路由(Exchange名称),未""则表示使用默认消息路由
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
         
        System.out.println(" [x] Sent '"+message+"'");
         
       //关闭消息通道和链接
        channel.close();
        connection.close();
         
    }
     
}

    消费者Recv.java
importcom.rabbitmq.client.Channel;
importcom.rabbitmq.client.Connection;
importcom.rabbitmq.client.ConnectionFactory;
importcom.rabbitmq.client.QueueingConsumer;
 
publicclassRecv {
 
    //消息队列名称
    privatefinalstatic String QUEUE_NAME="hello";
     
    publicstaticvoid main(String[] args)  throwsjava.io.IOException,java.lang.InterruptedException{
         
        //创建链接工厂
        ConnectionFactory factory = newConnectionFactory();
        factory.setHost("localhost");
        //创建链接
        Connection connection = factory.newConnection();
         
        //创建消息信道
        Channel channel = connection.createChannel();
         
        //生命消息队列
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        System.out.println("[*] Waiting for message. To exist press CTRL+C");
         
        //消费者用于获取消息信道绑定的消息队列中的信息
        QueueingConsumer consumer = newQueueingConsumer(channel);
         
        channel.basicConsume(QUEUE_NAME,true,consumer);
         
        while(true){
             
            //循环获取消息队列中的信息
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = newString(delivery.getBody());
            System.out.println("[x] Received '"+message+"'");
             
        }
         
    }
     
}
?

    首先运行Send.java 发送消息到服务器中,再运行Recv.java即可获得消息队列中的信息。
    这里并没有做消息的持久化操作,由于某些原因在程序运行过程中可能出现服务器宕机,以及其他外在因素使程序运行出现出错,消息的持久化就是使服务器即使停止后下一次启动依然能保持上一次操作消息队列的状态。可以保证程序依然能从异常开始的地方重新执行。也就是为什么要对消息进行持久化的主要原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值