rabbitmq(1)之"Hello World"模式

rabbitmq(1)之

1.架构图

  rabbitmq(1)之"Hello World"模式

 模式简介:

  • broker一个队列可以比喻作是一个邮箱。它存在于RabbitMQ中。虽然消息的传输需要通过RabbitMQ和你的应用程序,这些消息只能保存在队列中。一个队列是没有什么约束和限制的,只要你愿意它可以存储很多消息,本质上来说它就是一个无穷的缓冲区。许多消息生产者可以向一个发送消息,同样许多消费者可以尝试接收一个队列中的消息。下图所示就是一个队列

  • producer  生产者”其实和“消息发送”意思差不多。代表一个发送消息的生产者.
  • consumer 消费也可以理解为接收。一个接收者就是一个等待接收消息的程序
  • 生产者、消费者、中间件不必在同一台机器上。事实上他们应用当中没有在一台机器上。(rabbitmq部署到linux服务器,生产者和消费者分别在两个应用程序中,比如在订单系统和库存系统中)

2.实践应用

2.1  生产者

package com.rabbitmq.producer;

import com.rabbitmq.client.Connection;
import com.rabbitmq.utils.ConnectUtil;
import com.rabbitmq.client.Channel;
public class Producer1 {
    private static String QUEUE_NAME = "test_queue";
    public static void main(String[] argv) throws Exception{
        //获得连接
        Connection con =  ConnectUtil.getConnection();
        //获得通道
        Channel channel = con.createChannel();
        //声明创建队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //消息内容
        String message = "hello world!";
        //发送消息队列
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        //发送成功,打印发送信息
        System.out.println("生产者发送消息是:"+message);
        //关闭通道和连接
        channel.close();
        con.close();
        
    }
}

2.2 消费者

package com.rabbitmq.consumer;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
import com.rabbitmq.utils.ConnectUtil;

public class Consumer {
    private static String QUEUE_NAME = "test_queue";
    public static void main(String[] argv) throws Exception{
        //获得连接
        Connection con =  ConnectUtil.getConnection();
        //获得通道
        Channel channel = con.createChannel();
        //声明创建队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //创建消息者
        QueueingConsumer consumer = new QueueingConsumer(channel); 
        //发送消息队列
        channel.basicConsume(QUEUE_NAME, true, consumer);
        while(true){
            Delivery delivery= consumer.nextDelivery();
            String message = new String(delivery.getBody());
            System.out.println("g 消费者接受的消息是:"+message);
        }
    }
}