RabbitMQ之入門HelloWorld(Java)
RabbitMQ簡介
RabbitMQ是消費-生產者模型的一個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取或者訂閱佇列中的訊息。它是一個實現了AMQP協議的可複用的企業訊息系統。RabbitMQ是用Erlang開發。那麼RabbitMQ也具備容錯,熱更新,分散式快取,持久化等特點。RabbitMQ可以輕鬆的搭建出大型可用的分散式佇列訊息叢集。
RabbitMQ的結構圖:
RabbitMQ的一些概念:
Broker:簡單來說就是訊息佇列伺服器實體。
Exchange:訊息交換機,它指定訊息按什麼規則,路由到哪個佇列。
Queue:訊息佇列載體,每個訊息都會被投入到一個或多個佇列。
Binding:繫結,它的作用就是把exchange和queue按照路由規則繫結起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行訊息投遞。
vhost:虛擬主機,一個broker裡可以開設多個vhost,用作不同使用者的許可權分離。
producer:訊息生產者,就是投遞訊息的程式。
consumer:訊息消費者,就是接受訊息的程式。
channel:訊息通道,在客戶端的每個連線裡,可建立多個channel,每個channel代表一個會話任務。
RabbitMQ是用Erlang開發的,但對於主要的程式語言都有驅動或者客戶端。我們這裡要用的是Java來作為客戶端語言。假設都已經搭建好環境了(沒有的話看這裡),首先我們下載Java客戶端類庫,點選這裡,下圖是例子的模型:
首先建立佇列,生產者向佇列傳送訊息,消費者向佇列取出訊息,過程很簡單,下面正式開始吧~~
步驟如下:
(一)建立訪問使用者
[[email protected] sbin]# ./rabbitmqctl add_user test test
Creating user "test" ...
(二)給使用者繫結vhost並新增許可權
[[email protected] sbin]# ./rabbitmqctl set_permissions -p "/" test ".*" ".*" ".*"
Setting permissions for user "test" in vhost "/" ...
這裡就繫結預設的vhost“/”,也可以自己通過 ./rabbitmqctl add_vhost xx 來新增(三)編寫生產者程式並啟動
可以看到hello佇列裡有一條訊息了import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class HelloWorldProducer { private final static String QUEUE_NAME = "hello"; public static void main(String[] args) throws Exception{ ConnectionFactory cf = new ConnectionFactory(); //rabbitmq監聽IP cf.setHost("192.168.1.96"); //rabbitmq預設監聽埠,注意要記得開啟埠 cf.setPort(5672); //設定訪問的使用者 cf.setUsername("test"); cf.setPassword("test"); //建立連線 Connection conn = cf.newConnection(); //建立訊息通道 Channel channel = conn.createChannel(); String msg = "hello world!!!! 你好啊~"; //建立hello佇列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); //傳送訊息 channel.basicPublish("", QUEUE_NAME, null, msg.getBytes()); System.out.println("send msg "+ msg + " to ["+ QUEUE_NAME +"] queue !"); channel.close(); conn.close(); } }
[[email protected] sbin]# ./rabbitmqctl list_queues -p "/"
Listing queues ...
hello 1
[[email protected] sbin]#
(四)編寫消費者程式並啟動import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
public class HelloWorldConsumer {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory cf = new ConnectionFactory();
//rabbitmq監聽IP
cf.setHost("192.168.1.96");
//rabbitmq預設監聽埠,注意要記得開啟埠
cf.setPort(5672);
//設定訪問的使用者
cf.setUsername("test");
cf.setPassword("test");
//建立連線
Connection conn = cf.newConnection();
//建立訊息通道
Channel channel = conn.createChannel();
//建立hello佇列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" Waiting for msg....");
//建立消費者,並接受訊息
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("Received is = '" + msg + "'");
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
執行結果:這時佇列裡的訊息被消費掉了
[[email protected] sbin]# ./rabbitmqctl list_queues -p "/"
Listing queues ...
hello 0
[[email protected] sbin]#
如果不成功可能是一下幾點造成的:
- 如果連線不成功可能是IP不對或者是5672埠沒開啟,可以在rabbitmq.config中修改(預設是{tcp_listeners, [{"127.0.0.1",5672}]})
- 如果用guest(預設使用者)訪問,監聽Host則必須是localhost
- 如果是新建立的使用者,記得給使用者繫結vhost並新增許可權
- 可以從RabbitMQ的日誌檔案 [email protected] ,獲取更多詳細的錯誤資訊
相關推薦
RabbitMQ之入門HelloWorld(Java)
RabbitMQ簡介 RabbitMQ是消費-生產者模型的一個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取或者訂閱佇列中的訊息。它是一個實現了AMQP協議的可複用的企業訊息系統。Rab
Java 基礎 之 入門HelloWorld
Java 基礎 之 入門鏈接 : http://www.verejava.com/?id=1699251664916 import java.lang.*; /** @author : 胡楊 @version : 1.0 1. //雙斜杠代表註釋, 是給人看的, 機器忽略不計 2. public
java爬蟲之入門基礎 java讀取txt檔案,對字串進行操作後匯出txt檔案
相比於C#,java爬蟲,python爬蟲更為方便簡要,首先呢,python的urllib2包提供了較為完整的訪問網頁文件的API,再者呢對於摘下來的文章,python的beautifulsoap提供了簡潔的文件處理功能,這就成就了他爬蟲的優勢。 作為一名滿腦子要成為一名大牛的程式設計師小白來講,倒不是非要
RabbitMQ之入門
RabbitMQ之入門HelloWorld(Java) RabbitMQ四種Exchange型別之Headers(Java) RabbitMQ四種Exchange型別之Topic (Java) RabbitMQ四種Exchange型別
RabbitMQ之入門和基本概念
目錄 簡介 基本概念 ConnectionFactory、Connection、Channel——基本物件 Queue訊息佇列——內部物件 exchange訊息分發策略(路由) 1. Direct策略 2. Fanout策略 3. Topic策略 4. Heade
新增核心模組之入門helloworld.ko
首先 是從一個西郵學生看到的,比較好的入門方式: 首先是hello.c的檔案:主要要說明對核心的程式設計只能使用核心標頭檔案,所以通常我們都使用makefile來控制編譯過程 #include "linux/init.h" #include "linux/module.h"
排序算法入門之選擇排序-Java實現
ati min .net 入門 oid 下標 static ava 對象數組 本文參考http://blog.csdn.net/m0_37568091/article/details/78023705 選擇排序是先從對象數組中選出最小的放在第一個位置,再從剩下的元素中選
Java入門-類HelloWorld是公共的,應在名為HelloWorld.java的文件中聲明
world! void java源代碼 clas pan 保存文件 -h 明顯 命令行 public class HelloWorld { public static void main(String[] args) { System.ou
Java使用RabbitMQ之公平分發
env 接受 col java catch conn ech exceptio don 發送消息: 1 package org.study.workfair; 2 3 import com.rabbitmq.client.Channel; 4 import co
Java使用RabbitMQ之整合Spring(生產者)
獲取 消息 org str 依賴 chang import name 5.1 依賴包 <!--RabbitMQ集成spring--> <!-- https://mvnrepository.com/artifact/org
Java基礎之第一個Java程式HelloWorld及註釋
程式碼如下: // 一個檔案中只能有一個共有的類,並且與檔名稱一致,大小寫注意 public class HelloWorld{ // 程式的入口 public static void main
大資料入門教程系列之Hive的Java API 操作
Java 想要訪問Hive,需要通過beeline的方式連線Hive,hiveserver2提供了一個新的命令列工具beeline,hiveserver2 對 之前的hive做了升級,功能更加強大,它增加了許可權控制,要使用beeline需要先啟動hiverserver2,再使用beeline連線
RabbitMQ--入門 Helloworld
本系列教程主要來自於官網入門教程的翻譯,然後自己進行了部分的修改與實驗,內容僅供參考。 “Hello world” of RabbitMQ 1、Windows下RabbitMQ的安裝 下載Erlang,地址:http://www.erlang.org/downloa
RabbitMQ Publish/Subscribe for Java【入門教程 3】
首先通過上面兩個入門教程我們引入本文: Publish/Subscribe:在上一章中,我們學習建立了一個訊息佇列,她的每個任務訊息只發送給一個佇列,然後佇列的資訊由消費者各自消費。這一章,我們會將同一個任務訊息傳送給多個佇列。這種模式就是“釋出/訂閱”。為了將訊息傳送
RabbitMQ 入門 Helloworld
本系列教程主要來自於官網入門教程的翻譯,然後自己進行了部分的修改與實驗,內容僅供參考。“Hello world” of RabbitMQ1、Windows下RabbitMQ的安裝下載Erlang,地址:http://www.erlang.org/download/otp_win
RabbitMQ服務之入門篇
RabbitMQ是一種訊息中介軟體,能夠很好的處理來自客戶端的非同步訊息傳送及請求,將訊息傳送放入到服務端的佇列池中,而接收端可以根據RabbitMQ配置的轉發機制接收和過濾服務端轉發來的訊息。Rab
(九) RabbitMQ實戰教程(面向Java開發人員)之SpringBoot整合RabbitMQ
SpringBoot整合RabbitMQ 使用SpringBoot整合RabbitMQ非常簡單,它極大程度的簡化了開發成本,使用SpringBoot整合RabbitMQ需匯入如下依賴 <parent> <groupId>o
(四) RabbitMQ實戰教程(面向Java開發人員)之@RabbitListener訊息消費
使用RabbitListener註解進行訊息消費 在前一篇部落格中我們往MessageListenerContainer設定了MessageListener進行訊息的消費,本篇部落格將介紹一種更為簡單的訊息消費方式:使用@RabbitListener註解方式。
(七) RabbitMQ實戰教程(面向Java開發人員)之RabbitMQ常用屬性詳解
RabbitMQ常用屬性詳解 Alternate Exchange Alternate Exchange簡稱AE,當訊息不能被正確路由時,如果交換機設定了AE則訊息會被投遞到AE中,如果存在AE鏈則會按此繼續投遞,直到訊息被正確路由或AE鏈結束訊息被
(三) RabbitMQ實戰教程(面向Java開發人員)之Spring整合RabbitMQ
Spring整合RabbitMQ Spring AMQP是對AMQP協議的抽象和封裝,從官方網站上得知它是由兩個專案組成的(spring-amqp和spring-rabbit)。在使用Spring整合RabbitMQ時我們主要關注三個核心介面(MessageL