1. 程式人生 > >RabbitMQ簡單佇列使用

RabbitMQ簡單佇列使用

 pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5</groupId>
  <artifactId>rabbitmq</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  	<dependencies>
		<dependency>
			<groupId>com.rabbitmq</groupId>
			<artifactId>amqp-client</artifactId>
			<version>3.6.5</version>
		</dependency>
	</dependencies>
  
</project>

 建立連線的工具類:

package com.toov5.utils;

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

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
 
//沒有做成單例的  VirtualHost 需要複用
public class MQConnectionUtils {
    //建立新的連線
    public static Connection newConnection() throws
IOException, TimeoutException { //建立連線工廠 ConnectionFactory factory= new ConnectionFactory(); //連結地址 factory.setHost("192.168.91.6"); //使用者名稱稱 factory.setUsername("admin"); //使用者密碼 factory.setPassword("admin"); //amqp埠號 factory.setPort(5672); //連線virtualhost factory.setVirtualHost("/admin_toov5"); Connection connection
= factory.newConnection(); return connection; } }

Producer類

package com.toov5.Producer;

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

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.toov5.utils.MQConnectionUtils;

public class Producer {
    //佇列名稱
    private static final String UEUE_NAME = "test_queue";
    
    public static void main(String[] args) throws IOException, TimeoutException {
        //建立新的連線
    Connection connection = MQConnectionUtils.newConnection();
       //建立Channel
        Channel channel = connection.createChannel();
        //建立佇列
        channel.queueDeclare(UEUE_NAME, false, false, false, null);
        //建立message
        String msg = "toov5_message";
        System.out.println("生產者投遞訊息"+msg);
        //生產者傳送訊息
        channel.basicPublish("",UEUE_NAME, null, msg.getBytes());
        //關閉通道和連線
         channel.close();
         connection.close();
    }
}

 

執行結果

模擬get message

 

 

 producer跟consumer基本類似

package com.toov5.Consumer;

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

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.toov5.utils.MQConnectionUtils;

public class Consumer {
  
     //佇列名稱
        private static final String QUEUE_NAME = "test_queue";
        
        public static void main(String[] args) throws IOException, TimeoutException {
            System.out.println("消費者啟動..........");
            //建立新的連線
        Connection connection = MQConnectionUtils.newConnection();
           //建立Channel
            Channel channel = connection.createChannel();
            // 消費者關聯佇列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            
              DefaultConsumer defaultConsumerr = new DefaultConsumer(channel) {
                  //監聽獲取訊息
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                            byte[] body) throws IOException {
                        String msg =new String(body,"UTF-8");
                        System.out.println("消費者獲取生產者訊息:"+msg);
                    }
              };
            //牽手模式設定  預設自動應答模式  true:自動應答模式  
              channel.basicConsume(QUEUE_NAME, true, defaultConsumerr);              
              
//            //關閉通道和連線
//             channel.close();
//             connection.close();
        }
}

執行後的結果: