RabbitMQ消息隊列的五種模式-簡單模式

前言

RabbitMQ是消息代理:它接受並轉發消息。您可以將其視爲郵局:將要發佈的郵件放在郵箱中時,可以確保郵件代理人最終發給收件人。以此類推,RabbitMQ是一個郵箱,一個郵局和一個郵遞員。

RabbitMQ與郵局之間的主要區別在於,它不處理紙張,而是接收,存儲和轉發數據消息的二進制中轉站

在下圖中,“ P”是我們的生產者,“ C”是我們的消費者。中間的框是一個隊列-RabbitMQ代表使用者保留的消息緩衝區。

ï¼Pï¼-> [|||]->ï¼Cï¼

簡單隊列,是RabbitMQ中最簡單的一種工作隊列模式,也叫點對點模式。它有三個角色,一個生產者,一個隊列,一個消費者。理解起來也比較簡單!由於是一對一的工作模式,它的缺點也很明顯,如果在實際的應用中,業務處理比較耗費時間,那麼單隊列模式很難在併發環境下支撐。

一、引入RabbitMQ開發包

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

二、連接工具

package com.example.demo.util;

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

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

/**
 * 消息隊列連接工具
 *
 */
public class MQConnectionUtils {

    public static Connection connection() throws IOException, TimeoutException{
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setPort(5672);

        return factory.newConnection();
    }
}

三、生產者

package com.example.demo.produce;

import com.example.demo.util.MQConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

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

/**
 * 簡單模式 - 生產者
 *
 */
public class SimpleProduce {
    private static final String SIMPLE_QUEUE_NAME = "simple_queue_name";    

    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = MQConnectionUtils.connection();
        Channel channel = connection.createChannel();

        // 聲明一個隊列
        channel.queueDeclare(SIMPLE_QUEUE_NAME, false,false,false,null);
        String msg = "hello,我是簡單模式-生產者!";
        channel.basicPublish("", SIMPLE_QUEUE_NAME, null, msg.getBytes());
        channel.close();
        connection.close();
    }
}

四、消費者

package com.example.demo.consume;

import com.example.demo.common.Constant;
import com.example.demo.util.MQConnectionUtils;
import com.rabbitmq.client.*;

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

/**
 * 簡單模式 - 消費者
 */
public class SimpleConsume {

    private static final String SIMPLE_QUEUE_NAME = "simple_queue_name";

    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = MQConnectionUtils.connection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(SIMPLE_QUEUE_NAME,false,false, false,null);
        DefaultConsumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumeTag, Envelope envelope, AMQP.BasicProperties basicProperties, byte[] body)
            throws IOException{
                String msg = new String(body, "utf-8");
                System.out.println("收到的消息爲:<" + msg + ">");
            }
        };

        channel.basicConsume(SIMPLE_QUEUE_NAME,true,consumer);
    }
}

五、啓動服務

發佈了8 篇原創文章 · 獲贊 2 · 訪問量 9625
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章