1. 程式人生 > >RabbitMQ學習第一記:用java連接RabbitMQ

RabbitMQ學習第一記:用java連接RabbitMQ

dep pro 回調方法 總結 監聽 rabbit true asi false

1、什麽是RabbitMQ

  MQ(Message Queue):消息隊列,是服務端設計的一個可以存儲大量消息的隊列,並提供客戶端操作隊列的方法:生產隊列(向隊列中添加數據)、消費隊列(從隊列中取數據)。RabbitMQ就是基於消息隊列的一個典型應用。RabbitMQ除了普通的生產消費功能,還有一些高級功能:公平分發 ,輪詢分發,路由模式,通配符模式,發布訂閱,隊列持久化。

2、java實現RabbitMQ的連接

2.1、RabbitMQ客戶端jar包

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

<version>4.0.2</version>
</dependency>

2.2、java連接RabbitMQ工具類

復制代碼
public class ConnectionUtil
{
private static Logger logger = Logger.getLogger(ConnectionUtil.class);

public static Connection getConnection()
{
    try
    {
        Connection connection = null;
        //定義一個連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        //設置服務端地址(域名地址/ip)
        factory.setHost("127.0.0.1");
        //設置服務器端口號
        factory.setPort(5672);
        //設置虛擬主機(相當於數據庫中的庫)
        factory.setVirtualHost("/");
        //設置用戶名
        factory.setUsername("admin");
        //設置密碼
        factory.setPassword("888888");
        connection = factory.newConnection();
        return connection;
    }
    catch (Exception e)
    {
        return null;
    }
}

}
復制代碼
2.3、簡單的生產者-消費者模式

  下圖取自於官方網站(RabbitMQ)的生產消費模式的工作圖

P:消息的生產者

C:消息的消費者

紅色:隊列

生產者將消息發送到隊列,消費者從隊列中獲取消息。

2.4、生產者(Send)

復制代碼
public class Send
{
//隊列名稱
private static final String QUEUE_NAME = "test_simple_queue";

public static void main(String[] args)
{
    try
    {
        //獲取連接
        Connection connection = ConnectionUtil.getConnection();
        //從連接中獲取一個通道
        Channel channel = connection.createChannel();
        //聲明隊列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "This is simple queue";
        //發送消息
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes("utf-8"));
        System.out.println("[send]:" + message);
        channel.close();
        connection.close();
    }
    catch (IOException | TimeoutException e)
    {
        e.printStackTrace();
    }
}

}

運行結果:
[send]:This is simple queue
復制代碼
2.5、消費者(Receive)

復制代碼
public class Receive
{
//隊列名稱
private static final String QUEUE_NAME = "test_simple_queue";

public static void main(String[] args)
{
    try
    {
        //獲取連接
        Connection connection = ConnectionUtil.getConnection();
        //從連接中獲取一個通道
        Channel channel = connection.createChannel();
        //聲明隊列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //定義消費者
        DefaultConsumer consumer = new DefaultConsumer(channel)
        {
            //當消息到達時執行回調方法
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                    byte[] body) throws IOException
            {
                String message = new String(body, "utf-8");
                System.out.println("[Receive]:" + message);
            }
        };
        //監聽隊列
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
    catch (IOException | ShutdownSignalException | ConsumerCancelledException e)
    {
        e.printStackTrace();
    }
}

}

運行結果:
[Receive]:This is simple queue
復制代碼
總結
簡單的生產者-消費者模式實現了生產者向隊列裏生產數據,消費者啟動後可以一直監聽隊列,不斷的從隊列裏取出數據。

RabbitMQ學習第一記:用java連接RabbitMQ