
วันอังคารที่ 30 กันยายน พ.ศ. 2551
วันศุกร์ที่ 26 กันยายน พ.ศ. 2551
ติดตั้ง RabbitMQ บน windows
หลังจากลองศึกษามาพอสมควรกับ Message Queue Server ตัวนี้ เริ่มจากลองดุที่ภาษา Erlang ซึ่งเป็นภาษาที่เหมาะสมกับระบบที่มี concurrent user จำนวนมาก แตก thread การทำงานได้เยอะๆ [ เขาว่ามาอย่างนั้น ] และมาเจอ MQ ที่ implement ด้วย Erlang คือ RabbitMQ มันยังถูกใช้ใน Twitter ซึ่งปัจจุบันใช้อยู่ประจำ จึงยิ่งทำให้เกิดความสนใจมากขึ้น ไม่พูดมากแล้ว เริ่มเลยดีกว่า ...
ขั้นตอนการติดตั้ง
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
จะแสดงผลดังนี้ เป็นอันเสร็จสิ้น
มาดูการจัดการหลังการติดตั้ง สามารถเข้าไปดูได้ที่ี่ 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 ในเบื้องต้นได้แล้วครับ
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 ในเบื้องต้นได้แล้วครับ
วันพฤหัสบดีที่ 25 กันยายน พ.ศ. 2551
Process ที่เป็นอยู่
while (true) {
identify_and_fix_bottlenecks();
drink();
sleep();
notice_new_bottleneck();
}
This loop runs many times a day.
identify_and_fix_bottlenecks();
drink();
sleep();
notice_new_bottleneck();
}
This loop runs many times a day.
BDD with easyb
หลายสัปดาห์มาแล้วได้เรียนรู้เกี่ยวกับ BDD :: Behavior Driven Development ซึ่งฟังดูไปจะคล้ายๆ กับ TDD :: Test-Driven Developement แต่แตกต่างตรงที่
TDD คือ เขียน test -> coding -> Run Test -> Refactoring
แต่ BDD นั้นจะเป็นการทดสอบระบบงานให้เป็นไปตาม specification/requirement ไม่ได้ทำการทดสอบในระดับ unit test แต่การพัฒนานั้นสามารถใช้คู่กันได้อย่างปกติ [ BDD ไม่ได้มาทดแทน แต่มาช่วยทำให้ทั้งฝ่าย business และ developer เข้าใจกันมากขึ้น ]
TDD -> test
BDD -> spec
ฺBDD framework มีหลายตัวที่น่าสนใจเช่น
RSpec :: http://rspec.info/
JBehave :: http://jbehave.org/
easyb :: http://easyb.org/
JDave :: http://www.jdave.org/
framework ที่ผมสนใจคือ easyb เนื่องจากพัฒนาเพื่อใช้งานบน java platform และที่สำคัญสามารถใช้งานกับ groovy และ grails ได้ครับ
มาดูการใช้งานคร่าวๆ
ก่อนอื่นต้องเข้าใจ story และ specification
โดย story จะประกอบด้วย scenario ซึ่งใน scenario แต่ละตัวจะมี
- Given
- When
- Then
ตัวอย่างของ scenario
scenario "check username/password", {
given "user account already exists", {
}
when "user logins", {
}
then "should return a valid account", {
}
}
ใน { ... } นั้นสามารถแทรก code การทำงานในแต่ละส่วนเข้าไปเพื่อทดสอบได้
มาดูการ run easyb กัน
1. download easyb จาก http://easyb.org/download.html
2. extract และ run ตามนี้
java org.disco.easyb.BehaviorRunner MyStory.groovy
-> MyStory.groovy คือ story ที่เก็บ scenario ด้านบน โดยชื่อ file ต้องมี suffix เป็น Story
3. สามารถ generate report ได้ 2 แบบคือ
3.1 Text file
>>java org.disco.easyb.BehaviorRunner MyStory.groovy -txtstory mystory.txt
3.2 Xml file
>>java org.disco.easyb.BehaviorRunner MyStory.groovy -xmleasyb mystory.xml
ใน easyb version 1.0 จะสามารถ generate เป็น html ได้ครับ ต้องตั้งหน้าตั้งตารอคอยครับ
ถ้าต้องการใช้ใน grails สามารถใช้ plug-in มาช่วยได้ที่นี่ครับ EasyBTest
ใช้งานก็ง่ายดังนี้ครับ
การติดตั้ง
$grails install-plugin grails-easybtest-latest.zip
ทดสอบ run
$grails easyb-test
ส่วน BDD Framework ภาษาไทยก็มีนะครับ คือ TSpec
นี่ก็คือจุดเริ่มต้นในการศึกษาและใช้งาน BDD ครับ
Web Reference
http://www.grails66.com
http://easyb.org/
http://java.dzone.com/articles/is-easyb-easy
http://www.javaworld.com/javaworld/jw-09-2008/jw-09-easyb.html
TDD คือ เขียน test -> coding -> Run Test -> Refactoring
แต่ BDD นั้นจะเป็นการทดสอบระบบงานให้เป็นไปตาม specification/requirement ไม่ได้ทำการทดสอบในระดับ unit test แต่การพัฒนานั้นสามารถใช้คู่กันได้อย่างปกติ [ BDD ไม่ได้มาทดแทน แต่มาช่วยทำให้ทั้งฝ่าย business และ developer เข้าใจกันมากขึ้น ]
TDD -> test
BDD -> spec
ฺBDD framework มีหลายตัวที่น่าสนใจเช่น
RSpec :: http://rspec.info/
JBehave :: http://jbehave.org/
easyb :: http://easyb.org/
JDave :: http://www.jdave.org/
framework ที่ผมสนใจคือ easyb เนื่องจากพัฒนาเพื่อใช้งานบน java platform และที่สำคัญสามารถใช้งานกับ groovy และ grails ได้ครับ
มาดูการใช้งานคร่าวๆ
ก่อนอื่นต้องเข้าใจ story และ specification
โดย story จะประกอบด้วย scenario ซึ่งใน scenario แต่ละตัวจะมี
- Given
- When
- Then
ตัวอย่างของ scenario
scenario "check username/password", {
given "user account already exists", {
}
when "user logins", {
}
then "should return a valid account", {
}
}
ใน { ... } นั้นสามารถแทรก code การทำงานในแต่ละส่วนเข้าไปเพื่อทดสอบได้
มาดูการ run easyb กัน
1. download easyb จาก http://easyb.org/download.html
2. extract และ run ตามนี้
java org.disco.easyb.BehaviorRunner MyStory.groovy
-> MyStory.groovy คือ story ที่เก็บ scenario ด้านบน โดยชื่อ file ต้องมี suffix เป็น Story
3. สามารถ generate report ได้ 2 แบบคือ
3.1 Text file
>>java org.disco.easyb.BehaviorRunner MyStory.groovy -txtstory mystory.txt
3.2 Xml file
>>java org.disco.easyb.BehaviorRunner MyStory.groovy -xmleasyb mystory.xml
ใน easyb version 1.0 จะสามารถ generate เป็น html ได้ครับ ต้องตั้งหน้าตั้งตารอคอยครับ
ถ้าต้องการใช้ใน grails สามารถใช้ plug-in มาช่วยได้ที่นี่ครับ EasyBTest
ใช้งานก็ง่ายดังนี้ครับ
การติดตั้ง
$grails install-plugin grails-easybtest-latest.zip
ทดสอบ run
$grails easyb-test
ส่วน BDD Framework ภาษาไทยก็มีนะครับ คือ TSpec
นี่ก็คือจุดเริ่มต้นในการศึกษาและใช้งาน BDD ครับ
Web Reference
http://www.grails66.com
http://easyb.org/
http://java.dzone.com/articles/is-easyb-easy
http://www.javaworld.com/javaworld/jw-09-2008/jw-09-easyb.html
สมัครสมาชิก:
บทความ (Atom)