Basic requirements: java, php, mysql.
So lets starts with installation steps:
ActiveMQ installation
I am installing ActiveMQ in /usr/share/php directory.
cd /usr/share/php
wget http://mirror.its.uidaho.edu/pub/apache/activemq/apache-activemq/5.3.0/apache-activemq-5.3.0-bin.tar.gz
tar zxvf apache-activemq-5.3.0-bin.tar.gz
mv apache-activemq-5.3.0 activemq
We have renamed the directory to “activemq” for ease.
Run Apache ActiveMq
activemq/bin/activemq
Don’t close this terminal, open a new terminal for running below commands
Check running status of ActiveMq
netstat -an|grep 61616
ps -ef|grep activemq
ps command will show the process id (PID) of running ActiveMQ
ActiveMQ Web Admin interface
http://localhost:8161/admin/
Here you can monitor your current status of queues, topics, connections etc. You can also browse, delete, add data according to requirement.
Stop Apache AcitveMQ
kill -9 [PID]
where [PID] is the process id of the ActiveMQ process. Take it from ps command
ActiveMQ admin command
ActiveMQ is taking configuration details via simple xml (default:activemq.xml) file located in conf directory.
vi activemq/conf/activemq.xml
Make a small change in activemq.xml and your activemq-admin command will start working
Change the default createConnector=”false” to createConnector=”true” like below:
Now you can use below command for starting Apache ActiveMQ, stopping it and listing the connected brokers.
activemq/bin/activemq-admin start
activemq/bin/activemq-admin stop
activemq/bin/activemq-admin list
Configure STOMP transport connector, so that your PHP application can communicate with ActiveMQ
vi activemq/conf/activemq.xml
The default transport connector is openwire for native connectivity to Java and it will be available at tcp port 61616.
Change below code:
Data Persistence with MySql
Download latest MySQL Java Connector (mysql-connector-java-5.0.6-bin.jar) from MySql website. Copy the file into “activemq/lib/optional” folder
Launch the MySQL command line program and create a database for ActiveMQ
mysql> create database activemq;
vi activemq/conf/activemq.xml
The default persistence adapter is kahaDB which is fast but not very reliable. You can test it according to your condition or give MySql a change and take the better one.
Change below code:
Start the ActiveMQ and check the MySql
mysql> use activemq; show tables;
Database changed
+--------------------+
| Tables_in_activemq |
+--------------------+
| ACTIVEMQ_ACKS |
| ACTIVEMQ_LOCK |
| activemq_msgs |
+--------------------+
Your MySql data persistence is working fine.
Installing PHP STOMP client
pecl install stomp-beta
It will generate a stomp.so in /usr/lib/php/modules/ directory. Open /etc/php.ini and load the extension like below
extension=stomp.so
Restart httpd service like below
service httpd restart
PHP message queue producer and consumer code
Now you have to make two php sample files, one for producting messages in queue and other for consuming those messages.
producer.php
getMessage());
}
for($i=1;$i<10;$i++) msg1 = "queue one my data">send($queue1, $msg1, array('persistent' => 'true'));
}
unset($stomp);
?>
In above code, I have generated a few messages via loop. In real senerio, it will be generated by events whenever something need to be processed in queue.
consumer.php
getMessage());
}
$stomp->subscribe($queue1);
while(1)
{
$frame = $stomp->readFrame();
if ( $frame != null)
{
echo $frame->body; //process your message
echo "\n";
$stomp->ack($frame);
}
}
unset($stomp);
?>
If you look at the code carefully, the consumption of messages are in a infinite loop. The consumer is ready to process all incoming messages.
You have to run the consumer code from your terminal like below:
nohup php consumer.php > consumer.log 2>&1 &
It will start consumer.php forever with nohup command, directs the messages in the consumer.log file
Configure ActiveMQ as Unix Service
ActiveMQ should be configured as Unix Service and it should start automatically if your server restarts.
Create ActiveMQ startup script /etc/init.d/activemqstart.sh with the following content:
#!/bin/bash
export JAVA_HOME=/usr
/usr/share/php/activemq/bin/activemq &
Create ActiveMQ stop script /etc/init.d/activemqstop.sh with the following content:
#!/bin/bash
export JAVA_HOME=/usr
/usr/share/php/activemq/bin/activemq-admin stop
Create ActiveMQ Linux service configuration script /etc/init.d/activemq with the following content:
#!/bin/bash
#
# activemq Starts ActiveMQ.
#
# chkconfig: 345 88 12
# description: ActiveMQ is a JMS Messaging Queue Server.
### BEGIN INIT INFO
# Provides: $activemq
### END INIT INFO
# Source function library.
. /etc/init.d/functions
[ -f /etc/init.d/activemqstart.sh ] || exit 0
[ -f /etc/init.d/activemqstop.sh ] || exit 0
RETVAL=0
umask 077
start() {
echo -n $"Starting ActiveMQ: "
daemon /etc/init.d/activemqstart.sh
echo
return $RETVAL
}
stop() {
echo -n $"Shutting down ActiveMQ: "
daemon su -c /etc/init.d/activemqstop.sh activemq
echo
return $RETVAL
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
Enable ActiveMQ service configuration as Linux Daemon:
chmod +x /etc/init.d/activemqstart.sh
chmod +x /etc/init.d/activemqstop.sh
chmod +x /etc/init.d/activemq
/sbin/chkconfig --add activemq
/sbin/chkconfig activemq on
Restart the server.
reboot
All done, Enjoy!
Cheers!!
No comments:
Post a Comment