├── bin ├── classes.dex ├── RabbitMQ.apk ├── resources.ap_ ├── res │ ├── drawable-hdpi │ │ └── ic_launcher.png │ ├── drawable-ldpi │ │ └── ic_launcher.png │ ├── drawable-mdpi │ │ └── ic_launcher.png │ └── drawable-xhdpi │ │ └── ic_launcher.png ├── classes │ └── com │ │ └── karthi │ │ └── rabbitmq │ │ ├── R.class │ │ ├── R$id.class │ │ ├── R$attr.class │ │ ├── R$menu.class │ │ ├── R$style.class │ │ ├── R$drawable.class │ │ ├── R$layout.class │ │ ├── R$string.class │ │ ├── BuildConfig.class │ │ ├── MainActivity.class │ │ ├── MainActivity$1.class │ │ ├── MainActivity$2.class │ │ ├── MainActivity$3.class │ │ ├── MessageConsumer.class │ │ ├── MainActivity$send.class │ │ ├── MessageConsumer$1.class │ │ ├── MessageConsumer$2.class │ │ ├── MessageConsumer$3.class │ │ ├── IConnectToRabbitMQ.class │ │ ├── MainActivity$consumerconnect.class │ │ └── MessageConsumer$OnReceiveMessageHandler.class ├── dexedLibs │ ├── commons-io-1.2-452fea8dc7c25950ba6cf770c79de560.jar │ ├── commons-cli-1.1-7e17767cc0b62d1d1bfadcf3720ac996.jar │ ├── rabbitmq-client-f876d62cf676c70af40a5e1c8d42d7bc.jar │ └── android-support-v4-771d0b481e22808f1f23e7258aedd246.jar └── AndroidManifest.xml ├── ic_launcher-web.png ├── libs ├── commons-io-1.2.jar ├── commons-cli-1.1.jar ├── rabbitmq-client.jar └── android-support-v4.jar ├── res ├── drawable-hdpi │ └── ic_launcher.png ├── drawable-ldpi │ └── ic_launcher.png ├── drawable-mdpi │ └── ic_launcher.png ├── drawable-xhdpi │ └── ic_launcher.png ├── values │ ├── strings.xml │ └── styles.xml ├── menu │ └── activity_main.xml ├── values-v11 │ └── styles.xml ├── values-v14 │ └── styles.xml └── layout │ └── activity_main.xml ├── gen └── com │ └── karthi │ └── rabbitmq │ ├── BuildConfig.java │ └── R.java ├── project.properties ├── proguard-project.txt ├── AndroidManifest.xml ├── src └── com │ └── karthi │ └── rabbitmq │ ├── IConnectToRabbitMQ.java │ ├── MessageConsumer.java │ └── MainActivity.java └── README.md /bin/classes.dex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes.dex -------------------------------------------------------------------------------- /bin/RabbitMQ.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/RabbitMQ.apk -------------------------------------------------------------------------------- /bin/resources.ap_: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/resources.ap_ -------------------------------------------------------------------------------- /ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/ic_launcher-web.png -------------------------------------------------------------------------------- /libs/commons-io-1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/libs/commons-io-1.2.jar -------------------------------------------------------------------------------- /libs/commons-cli-1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/libs/commons-cli-1.1.jar -------------------------------------------------------------------------------- /libs/rabbitmq-client.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/libs/rabbitmq-client.jar -------------------------------------------------------------------------------- /libs/android-support-v4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/libs/android-support-v4.jar -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/res/drawable-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/drawable-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/res/drawable-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$id.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$id.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$attr.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$attr.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$menu.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$menu.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$style.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$style.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$drawable.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$drawable.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$layout.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$layout.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/R$string.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/R$string.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/BuildConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/BuildConfig.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MainActivity.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MainActivity.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MainActivity$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MainActivity$1.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MainActivity$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MainActivity$2.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MainActivity$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MainActivity$3.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MessageConsumer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MessageConsumer.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MainActivity$send.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MainActivity$send.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MessageConsumer$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MessageConsumer$1.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MessageConsumer$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MessageConsumer$2.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MessageConsumer$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MessageConsumer$3.class -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/IConnectToRabbitMQ.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/IConnectToRabbitMQ.class -------------------------------------------------------------------------------- /bin/dexedLibs/commons-io-1.2-452fea8dc7c25950ba6cf770c79de560.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/dexedLibs/commons-io-1.2-452fea8dc7c25950ba6cf770c79de560.jar -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MainActivity$consumerconnect.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MainActivity$consumerconnect.class -------------------------------------------------------------------------------- /bin/dexedLibs/commons-cli-1.1-7e17767cc0b62d1d1bfadcf3720ac996.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/dexedLibs/commons-cli-1.1-7e17767cc0b62d1d1bfadcf3720ac996.jar -------------------------------------------------------------------------------- /bin/dexedLibs/rabbitmq-client-f876d62cf676c70af40a5e1c8d42d7bc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/dexedLibs/rabbitmq-client-f876d62cf676c70af40a5e1c8d42d7bc.jar -------------------------------------------------------------------------------- /bin/dexedLibs/android-support-v4-771d0b481e22808f1f23e7258aedd246.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/dexedLibs/android-support-v4-771d0b481e22808f1f23e7258aedd246.jar -------------------------------------------------------------------------------- /gen/com/karthi/rabbitmq/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /** Automatically generated file. DO NOT MODIFY */ 2 | package com.karthi.rabbitmq; 3 | 4 | public final class BuildConfig { 5 | public final static boolean DEBUG = true; 6 | } -------------------------------------------------------------------------------- /bin/classes/com/karthi/rabbitmq/MessageConsumer$OnReceiveMessageHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intrepidkarthi/RabbitMQ-Android-Chat/HEAD/bin/classes/com/karthi/rabbitmq/MessageConsumer$OnReceiveMessageHandler.class -------------------------------------------------------------------------------- /res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RabbitMQ 5 | Hello world! 6 | Settings 7 | 8 | -------------------------------------------------------------------------------- /res/menu/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /res/values-v11/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=android-17 15 | -------------------------------------------------------------------------------- /res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /bin/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 15 | 16 | 17 | 27 | 28 | 35 | 36 | -------------------------------------------------------------------------------- /src/com/karthi/rabbitmq/IConnectToRabbitMQ.java: -------------------------------------------------------------------------------- 1 | package com.karthi.rabbitmq; 2 | 3 | import java.io.IOException; 4 | 5 | import android.util.Log; 6 | 7 | import com.rabbitmq.client.Channel; 8 | import com.rabbitmq.client.Connection; 9 | import com.rabbitmq.client.ConnectionFactory; 10 | 11 | /** 12 | * Base class for objects that connect to a RabbitMQ Broker 13 | */ 14 | public abstract class IConnectToRabbitMQ { 15 | public String mServer; 16 | public String mExchange; 17 | 18 | protected Channel mModel = null; 19 | protected Connection mConnection; 20 | 21 | protected boolean Running ; 22 | 23 | protected String MyExchangeType ; 24 | 25 | /** 26 | * 27 | * @param server The server address 28 | * @param exchange The named exchange 29 | * @param exchangeType The exchange type name 30 | */ 31 | public IConnectToRabbitMQ(String server, String exchange, String exchangeType) 32 | { 33 | mServer = server; 34 | mExchange = exchange; 35 | MyExchangeType = exchangeType; 36 | } 37 | 38 | public void Dispose() 39 | { 40 | Running = false; 41 | 42 | try { 43 | if (mConnection!=null) 44 | mConnection.close(); 45 | if (mModel != null) 46 | mModel.abort(); 47 | } catch (IOException e) { 48 | // TODO Auto-generated catch block 49 | e.printStackTrace(); 50 | } 51 | 52 | } 53 | 54 | /** 55 | * Connect to the broker and create the exchange 56 | * @return success 57 | */ 58 | public boolean connectToRabbitMQ() 59 | { 60 | if(mModel!= null && mModel.isOpen() )//already declared 61 | return true; 62 | try 63 | { 64 | ConnectionFactory connectionFactory = new ConnectionFactory(); 65 | connectionFactory.setHost(mServer); 66 | mConnection = connectionFactory.newConnection(); 67 | mModel = mConnection.createChannel(); 68 | mModel.exchangeDeclare(mExchange, MyExchangeType, true); 69 | 70 | return true; 71 | } 72 | catch (Exception e) 73 | { 74 | e.printStackTrace(); 75 | return false; 76 | } 77 | } 78 | } -------------------------------------------------------------------------------- /gen/com/karthi/rabbitmq/R.java: -------------------------------------------------------------------------------- 1 | /* AUTO-GENERATED FILE. DO NOT MODIFY. 2 | * 3 | * This class was automatically generated by the 4 | * aapt tool from the resource data it found. It 5 | * should not be modified by hand. 6 | */ 7 | 8 | package com.karthi.rabbitmq; 9 | 10 | public final class R { 11 | public static final class attr { 12 | } 13 | public static final class drawable { 14 | public static final int ic_launcher=0x7f020000; 15 | } 16 | public static final class id { 17 | public static final int menu_settings=0x7f070003; 18 | public static final int out2=0x7f070002; 19 | public static final int out3=0x7f070001; 20 | public static final int output=0x7f070000; 21 | } 22 | public static final class layout { 23 | public static final int activity_main=0x7f030000; 24 | } 25 | public static final class menu { 26 | public static final int activity_main=0x7f060000; 27 | } 28 | public static final class string { 29 | public static final int app_name=0x7f040000; 30 | public static final int hello_world=0x7f040001; 31 | public static final int menu_settings=0x7f040002; 32 | } 33 | public static final class style { 34 | /** 35 | Base application theme, dependent on API level. This theme is replaced 36 | by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 37 | 38 | 39 | Theme customizations available in newer API levels can go in 40 | res/values-vXX/styles.xml, while customizations related to 41 | backward-compatibility can go here. 42 | 43 | 44 | Base application theme for API 11+. This theme completely replaces 45 | AppBaseTheme from res/values/styles.xml on API 11+ devices. 46 | 47 | API 11 theme customizations can go here. 48 | 49 | Base application theme for API 14+. This theme completely replaces 50 | AppBaseTheme from BOTH res/values/styles.xml and 51 | res/values-v11/styles.xml on API 14+ devices. 52 | 53 | API 14 theme customizations can go here. 54 | */ 55 | public static final int AppBaseTheme=0x7f050000; 56 | /** Application theme. 57 | All customizations that are NOT specific to a particular API-level can go here. 58 | */ 59 | public static final int AppTheme=0x7f050001; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | RabbitMQ-Android-Chat 2 | ===================== 3 | 4 | RabbitMQ-Android-Chat 5 | 6 | I spent more than 12 hours in setting up RabbitMQ server in Ubuntu and creating an Android app which communicates from server and also communicates with other devices through the server. So I thought it will be good to share the whole information I found in a single place. I found information from various sources. 7 | 8 | http://simonwdixon.wordpress.com/2011/06/03/getting-started-with-rabbitmq-on-android-part-1/ 9 | 10 | http://kamrana.wordpress.com/2012/05/10/android-chat-application-using-rabbitmq/ 11 | 12 | http://www.danielscottlawrence.com/using-rabbitmq-management-plugin-on-ubuntu-12-04/ 13 | 14 | And as usual from http://www.stackoverflow.com 15 | 16 | I am using Ubuntu 12.04. This tutorial is completely based on this. So I am not sure how will it work on Windows or Mac OS. 17 | 18 | A. Install the latest version of RabbitMQ as per the instruction from here 19 | 20 | Add the following line to your /etc/apt/sources.list: 21 | deb http://www.rabbitmq.com/debian/ testing main 22 | (Please note that the word testing in this line refers to the state of our release of RabbitMQ, not any particular Debian distribution. You can use it with Debian stable, testing or unstable, as well as with Ubuntu. We describe the release as “testing” to emphasise that we release somewhat frequently.) 23 | 24 | (optional) To avoid warnings about unsigned packages, add our public key to your trusted key list using apt-key(8): 25 | wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc 26 | sudo apt-key add rabbitmq-signing-key-public.asc 27 | Run apt-get update. 28 | Install packages as usual; for instance, 29 | sudo apt-get install rabbitmq-server 30 | B. It is better to have a GUI client. It comes along with the installation. We just need to enable it. To enable the plugin follow the steps given below. 31 | 32 | Install rabbitmq-server 33 | 34 | $ sudo apt-get install rabbitmq-server 35 | 36 | Enable the rabbitmq-management plugin 37 | 38 | $ sudo /usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin/rabbitmq-plugins enable rabbitmq_management 39 | The following plugins have been enabled: 40 | mochiweb 41 | webmachine 42 | rabbitmq_mochiweb 43 | amqp_client 44 | rabbitmq_management_agent 45 | rabbitmq_management 46 | 47 | Plugin configuration has changed. Restart RabbitMQ for changes to take effect. 48 | Restart rabbitmq-server for the changes to take affect. 49 | 50 | $ sudo service rabbitmq-server restart 51 | Restarting rabbitmq-server: SUCCESS 52 | rabbitmq-server. 53 | Checked the newly enabled plugins 54 | 55 | $ sudo /usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin/rabbitmq-plugins list 56 | [e] amqp_client 0.0.0 57 | [ ] eldap 0.0.0-git 58 | [ ] erlando 0.0.0 59 | [e] mochiweb 1.3-rmq0.0.0-git 60 | [ ] rabbitmq_auth_backend_ldap 0.0.0 61 | [ ] rabbitmq_auth_mechanism_ssl 0.0.0 62 | [ ] rabbitmq_consistent_hash_exchange 0.0.0 63 | [ ] rabbitmq_federation 0.0.0 64 | [ ] rabbitmq_jsonrpc 0.0.0 65 | [ ] rabbitmq_jsonrpc_channel 0.0.0 66 | [ ] rabbitmq_jsonrpc_channel_examples 0.0.0 67 | [E] rabbitmq_management 0.0.0 68 | [e] rabbitmq_management_agent 0.0.0 69 | [ ] rabbitmq_management_visualiser 0.0.0 70 | [e] rabbitmq_mochiweb 0.0.0 71 | [ ] rabbitmq_shovel 0.0.0 72 | [ ] rabbitmq_shovel_management 0.0.0 73 | [ ] rabbitmq_stomp 0.0.0 74 | [ ] rabbitmq_tracing 0.0.0 75 | [ ] rfc4627_jsonrpc 0.0.0-git 76 | [e] webmachine 1.7.0-rmq0.0.0-hg 77 | I could new access the mangement plugin via: 78 | 79 | http://192.168.1.2:55672/#/ 80 | 81 | Username: guest 82 | Password: guest 83 | If 192.168.1.2 doesn’t work try 192.168.1.* 84 | 85 | run the app after this :) 86 | -------------------------------------------------------------------------------- /src/com/karthi/rabbitmq/MessageConsumer.java: -------------------------------------------------------------------------------- 1 | package com.karthi.rabbitmq; 2 | 3 | import java.io.IOException; 4 | 5 | import android.os.Handler; 6 | import android.util.Log; 7 | 8 | import com.rabbitmq.client.QueueingConsumer; 9 | 10 | /** 11 | *Consumes messages from a RabbitMQ broker 12 | * 13 | */ 14 | public class MessageConsumer extends IConnectToRabbitMQ{ 15 | 16 | public MessageConsumer(String server, String exchange, String exchangeType) { 17 | super(server, exchange, exchangeType); 18 | } 19 | 20 | //The Queue name for this consumer 21 | private String mQueue; 22 | private QueueingConsumer MySubscription; 23 | 24 | //last message to post back 25 | private byte[] mLastMessage; 26 | 27 | // An interface to be implemented by an object that is interested in messages(listener) 28 | public interface OnReceiveMessageHandler{ 29 | 30 | public void onReceiveMessage(byte[] message); 31 | }; 32 | 33 | //A reference to the listener, we can only have one at a time(for now) 34 | private OnReceiveMessageHandler mOnReceiveMessageHandler; 35 | 36 | /** 37 | * 38 | * Set the callback for received messages 39 | * @param handler The callback 40 | */ 41 | public void setOnReceiveMessageHandler(OnReceiveMessageHandler handler){ 42 | mOnReceiveMessageHandler = handler; 43 | }; 44 | 45 | private Handler mMessageHandler = new Handler(); 46 | private Handler mConsumeHandler = new Handler(); 47 | 48 | // Create runnable for posting back to main thread 49 | final Runnable mReturnMessage = new Runnable() { 50 | public void run() { 51 | mOnReceiveMessageHandler.onReceiveMessage(mLastMessage); 52 | } 53 | }; 54 | 55 | final Runnable mConsumeRunner = new Runnable() { 56 | public void run() { 57 | Consume(); 58 | } 59 | }; 60 | 61 | /** 62 | * Create Exchange and then start consuming. A binding needs to be added before any messages will be delivered 63 | */ 64 | @Override 65 | public boolean connectToRabbitMQ() 66 | { 67 | if(super.connectToRabbitMQ()) 68 | { 69 | 70 | try { 71 | mQueue = mModel.queueDeclare().getQueue(); 72 | MySubscription = new QueueingConsumer(mModel); 73 | mModel.basicConsume(mQueue, false, MySubscription); 74 | } catch (IOException e) { 75 | e.printStackTrace(); 76 | return false; 77 | } 78 | if (MyExchangeType == "fanout") 79 | AddBinding("");//fanout has default binding 80 | 81 | Running = true; 82 | mConsumeHandler.post(mConsumeRunner); 83 | 84 | return true; 85 | } 86 | return false; 87 | } 88 | 89 | /** 90 | * Add a binding between this consumers Queue and the Exchange with routingKey 91 | * @param routingKey the binding key eg GOOG 92 | */ 93 | public void AddBinding(String routingKey) 94 | { 95 | try { 96 | mModel.queueBind(mQueue, mExchange, routingKey); 97 | } catch (IOException e) { 98 | // TODO Auto-generated catch block 99 | e.printStackTrace(); 100 | } 101 | } 102 | 103 | /** 104 | * Remove binding between this consumers Queue and the Exchange with routingKey 105 | * @param routingKey the binding key eg GOOG 106 | */ 107 | public void RemoveBinding(String routingKey) 108 | { 109 | try { 110 | mModel.queueUnbind(mQueue, mExchange, routingKey); 111 | } catch (IOException e) { 112 | // TODO Auto-generated catch block 113 | e.printStackTrace(); 114 | } 115 | } 116 | 117 | private void Consume() 118 | { 119 | Thread thread = new Thread() 120 | { 121 | 122 | @Override 123 | public void run() { 124 | while(Running){ 125 | QueueingConsumer.Delivery delivery; 126 | try { 127 | delivery = MySubscription.nextDelivery(); 128 | mLastMessage = delivery.getBody(); 129 | Log.v("mLastMessage ", mLastMessage.toString()); 130 | mMessageHandler.post(mReturnMessage); 131 | try { 132 | mModel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); 133 | } catch (IOException e) { 134 | e.printStackTrace(); 135 | } 136 | } catch (InterruptedException ie) { 137 | ie.printStackTrace(); 138 | } 139 | } 140 | } 141 | }; 142 | thread.start(); 143 | 144 | } 145 | 146 | public void dispose(){ 147 | Running = false; 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /src/com/karthi/rabbitmq/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.karthi.rabbitmq; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | 5 | 6 | import com.karthi.rabbitmq.R; 7 | import com.karthi.rabbitmq.MessageConsumer.OnReceiveMessageHandler; 8 | import com.rabbitmq.client.Channel; 9 | import com.rabbitmq.client.Connection; 10 | import com.rabbitmq.client.ConnectionFactory; 11 | 12 | import android.os.AsyncTask; 13 | import android.os.Bundle; 14 | import android.app.Activity; 15 | import android.text.format.Formatter; 16 | import android.util.Log; 17 | import android.view.KeyEvent; 18 | import android.view.Menu; 19 | import android.view.View; 20 | import android.view.View.OnKeyListener; 21 | import android.widget.EditText; 22 | import android.widget.TextView; 23 | import android.widget.Toast; 24 | 25 | public class MainActivity extends Activity { 26 | private MessageConsumer mConsumer; 27 | private TextView mOutput; 28 | private String QUEUE_NAME = "myqueue"; 29 | private String EXCHANGE_NAME = "test"; 30 | private String message = ""; 31 | private String name = ""; 32 | 33 | /** Called when the activity is first created. */ 34 | @Override 35 | public void onCreate(Bundle savedInstanceState) { 36 | super.onCreate(savedInstanceState); 37 | setContentView(R.layout.activity_main); 38 | Toast.makeText(MainActivity.this, "RabbitMQ Chat Service!", 39 | Toast.LENGTH_LONG).show(); 40 | 41 | final EditText etv1 = (EditText) findViewById(R.id.out3); 42 | etv1.setOnKeyListener(new OnKeyListener() { 43 | public boolean onKey(View v, int keyCode, KeyEvent event) { 44 | // If the event is a key-down event on the "enter" button 45 | if ((event.getAction() == KeyEvent.ACTION_DOWN) 46 | && (keyCode == KeyEvent.KEYCODE_ENTER)) { 47 | // Perform action on key press 48 | name = etv1.getText().toString(); 49 | etv1.setText(""); 50 | etv1.setVisibility(View.GONE); 51 | return true; 52 | } 53 | return false; 54 | } 55 | }); 56 | 57 | final EditText etv = (EditText) findViewById(R.id.out2); 58 | etv.setOnKeyListener(new OnKeyListener() { 59 | public boolean onKey(View arg0, int arg1, KeyEvent arg2) { 60 | // If the event is a key-down event on the "enter" button 61 | if ((arg2.getAction() == KeyEvent.ACTION_DOWN) 62 | && (arg1 == KeyEvent.KEYCODE_ENTER)) { 63 | // Perform action on key press 64 | message = name + ": " + etv.getText().toString(); 65 | new send().execute(message); 66 | etv.setText(""); 67 | return true; 68 | } 69 | return false; 70 | } 71 | }); 72 | 73 | // The output TextView we'll use to display messages 74 | mOutput = (TextView) findViewById(R.id.output); 75 | 76 | // Create the consumer 77 | mConsumer = new MessageConsumer("10.0.2.2", "test", "fanout"); 78 | new consumerconnect().execute(); 79 | // register for messages 80 | mConsumer.setOnReceiveMessageHandler(new OnReceiveMessageHandler() { 81 | 82 | public void onReceiveMessage(byte[] message) { 83 | String text = ""; 84 | try { 85 | text = new String(message, "UTF8"); 86 | } catch (UnsupportedEncodingException e) { 87 | e.printStackTrace(); 88 | } 89 | 90 | mOutput.append("\n" + text); 91 | } 92 | }); 93 | 94 | 95 | } 96 | 97 | private class send extends AsyncTask { 98 | 99 | @Override 100 | protected Void doInBackground(String... Message) { 101 | try { 102 | 103 | ConnectionFactory factory = new ConnectionFactory(); 104 | factory.setHost("10.0.2.2"); 105 | 106 | // my internet connection is a bit restrictive so I have use an 107 | // external server 108 | // which has RabbitMQ installed on it. So I use "setUsername" 109 | // and "setPassword" 110 | factory.setUsername("guest"); 111 | factory.setPassword("guest"); 112 | //factory.setVirtualHost("karthi"); 113 | factory.setPort(5672); 114 | System.out.println(""+factory.getHost()+factory.getPort()+factory.getRequestedHeartbeat()+factory.getUsername()); 115 | Connection connection = factory.newConnection(); 116 | Channel channel = connection.createChannel(); 117 | 118 | channel.exchangeDeclare(EXCHANGE_NAME, "fanout", true); 119 | channel.queueDeclare(QUEUE_NAME, false, false, false, null); 120 | String tempstr = ""; 121 | for (int i = 0; i < Message.length; i++) 122 | tempstr += Message[i]; 123 | 124 | channel.basicPublish(EXCHANGE_NAME, QUEUE_NAME, null, 125 | tempstr.getBytes()); 126 | 127 | channel.close(); 128 | 129 | connection.close(); 130 | 131 | } catch (Exception e) { 132 | // TODO: handle exception 133 | e.printStackTrace(); 134 | } 135 | // TODO Auto-generated method stub 136 | return null; 137 | } 138 | 139 | } 140 | 141 | 142 | private class consumerconnect extends AsyncTask { 143 | 144 | @Override 145 | protected Void doInBackground(String... Message) { 146 | try { 147 | 148 | 149 | 150 | // Connect to broker 151 | mConsumer.connectToRabbitMQ(); 152 | 153 | 154 | 155 | } catch (Exception e) { 156 | // TODO: handle exception 157 | e.printStackTrace(); 158 | } 159 | // TODO Auto-generated method stub 160 | return null; 161 | } 162 | 163 | } 164 | 165 | @Override 166 | protected void onResume() { 167 | super.onPause(); 168 | new consumerconnect().execute(); 169 | } 170 | 171 | @Override 172 | protected void onPause() { 173 | super.onPause(); 174 | mConsumer.dispose(); 175 | } 176 | } --------------------------------------------------------------------------------