วันศุกร์ที่ 26 กันยายน พ.ศ. 2551

ติดตั้ง RabbitMQ บน windows

หลังจากลองศึกษามาพอสมควรกับ Message Queue Server ตัวนี้ เริ่มจากลองดุที่ภาษา Erlang ซึ่งเป็นภาษาที่เหมาะสมกับระบบที่มี concurrent user จำนวนมาก แตก thread การทำงานได้เยอะๆ [ เขาว่ามาอย่างนั้น ] และมาเจอ MQ ที่ implement ด้วย Erlang คือ RabbitMQ มันยังถูกใช้ใน Twitter ซึ่งปัจจุบันใช้อยู่ประจำ จึงยิ่งทำให้เกิดความสนใจมากขึ้น ไม่พูดมากแล้ว เริ่มเลยดีกว่า ...


RabbitMQ is an implementation of AMQP, the emerging standard for high performance enterprise messaging


ขั้นตอนการติดตั้ง
1. download RabbitMQ Windows Bundle ที่ http://www.rabbitmq.com/download.html โดยใน zip file จะประกอบไปด้วย
- Erlang :: otp_win32_xxxx.exe
- RabbitMq Server :: rabbitmq-server-windows-xxxx.zip
- RabbitMq Client for Java :: rabbitmq-java-client-bin-xxxx.zip

2. ทำการติดตั้ง Erlang
3. extract rabbitmq-server-windows-xxxx.zip จะมี folder -> ebin, sbin, src, include
4. กำหนด env ตาม Link สรุปง่ายๆ เป็นดังนี้
- กำหนด ERLANG_HOME คือ folder ที่ทำการติดตั้ง erlang
- กำหนด RABBITMQ_BASE คือ folder ที่จะใช้เก็บข้อมูลต่างๆ ของ mq เช่น user account, message

5. ทดสอบ run rabbitmq server
- ไปที่ folder sbin ทำการ run
>>rabbitmq-server.bat
จะแสดงผลดังนี้ เป็นอันเสร็จสิ้น

...
starting database ...done
starting core processes ...done
starting recovery ...done
starting persister ...done
starting builtin applications ...done
starting TCP listeners ...done
ิbroke running


มาดูการจัดการหลังการติดตั้ง สามารถเข้าไปดูได้ที่ี่ http://www.rabbitmq.com/admin-guide.html โดยหลักจะทำการ
- Manage Server : stop, start
- Manage User Account
- Manage VirtualHost
- Manage Realm
- Grant permmision to user

ค่า default ของ rabbitmq เป็นดังนี้
username = guest
password = guest
virtualhost = /
realm = /data
host = localhost/ip/127.0.0.1

ผมใช้ client เป็น java ตามสิ่งที่ load มาตั้งแต่แรก ซึ่ง API ที่ให้มาก้ใช้งานไม่ยาก สามารถอ่านจากเอกสารได้ที่ http://www.rabbitmq.com/api-guide.html

ตัวอย่าง code การติดต่อ จะประกอบไปด้วย

1. Create Channel
ConnectionParameters params = new ConnectionParameters();
params.setUsername("guest");
params.setPassword("guest");
params.setVirtualHost("/");
params.setRequestedHeartbeat(0);
ConnectionFactory factory = new ConnectionFactory(params);
Connection conn = factory.newConnection("localhost", 5672);
Channel channel = conn.createChannel();
int ticket = channel.accessRequest("/data");
channel.exchangeDeclare(ticket, "exchangeName", "direct", true);
channel.queueDeclare(ticket, "queueName");
channel.queueBind(ticket, "queueName", "exchangeName","routingKey");

2. Publish Message to broker [ RabbitMQ ]
byte[] messageBodyBytes = "Hello, world!".getBytes();
channel.basicPublish(ticket, "exchangeName", "routingKey", null, messageBodyBytes);

3. Retrieve Message from broker [ RabbitMQ ]
GetResponse response = channel.basicGet(ticket, "queueName", noAck);
if (response == null) {
// No message retrieved.
} else {
AMQP.BasicProperties props = response.getProps();
byte[] body = response.getBody();
long deliveryTag = response.getEnvelope().getDeliveryTag();
channel.basicAck(deliveryTag, false);
System.out.println(new String(body));
}

4. Close channel
channel.close(AMQP.REPLY_SUCCESS, "Goodbye");
conn.close(AMQP.REPLY_SUCCESS);


เท่านี้ก็สามารถเริ่มใช้งาน RabbitMQ ในเบื้องต้นได้แล้วครับ