参考:https://blog.csdn.net/qq_36576738/article/details/83754621

我这android这边就不实现发布消息功能。因为我是在服务端那边推送消息。

开发工具android studio。

1》建好项目后添加包(目前最新的是5.7.0):

  1. dependencies {
  2. implementation 'com.rabbitmq:amqp-client:5.7.0'
  3. }

2》在主页面上加个TextView,用来显示服务端推送的消息。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8.  
  9. <TextView
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:id="@+id/txtrabbitmqt"
  13. android:text="rabbitmq"
  14. app:layout_constraintBottom_toBottomOf="parent"
  15. app:layout_constraintLeft_toLeftOf="parent"
  16. app:layout_constraintRight_toRightOf="parent"
  17. app:layout_constraintTop_toTopOf="parent" />
  18.  
  19. </android.support.constraint.ConstraintLayout>

3》连接服务器上的RabbitMq:

  1. /**
  2. * 连接设置
  3. */
  4. private void setupConnectionFactory() {
  5. factory = new ConnectionFactory();
  6. factory.setHost("服务器ip");
  7. factory.setPort(rabbitmq端口,默认5672);
  8. factory.setUsername("自己连接rabbitmq账号");
  9. factory.setPassword("自己连接rabbitmq的密码");
  10. }

4》编写订阅代码:

  1. /**
  2. * 收消息(从发布者那边订阅消息)
  3. */
  4. private void basicConsume(final Handler handler){
  5.  
  6. try {
  7. //连接
  8. Connection connection = factory.newConnection() ;
  9. //通道
  10. final Channel channel = connection.createChannel() ;
  11. //实现Consumer的最简单方法是将便捷类DefaultConsumer子类化。可以在basicConsume 调用上传递此子类的对象以设置订阅:
  12. channel.basicConsume("myqueue" , false , new DefaultConsumer(channel){
  13. @Override
  14. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  15. super.handleDelivery(consumerTag, envelope, properties, body);
  16.  
  17. String msg = new String(body) ;
  18. long deliveryTag = envelope.getDeliveryTag() ;
  19. channel.basicAck(deliveryTag , false);
  20. //从message池中获取msg对象更高效
  21. Message uimsg = handler.obtainMessage();
  22. Bundle bundle = new Bundle();
  23. bundle.putString("msg", msg);
  24. uimsg.setData(bundle);
  25. handler.sendMessage(uimsg);
  26.  
  27. }
  28. });
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. } catch (TimeoutException e) {
  32. e.printStackTrace();
  33. }
  34. }

整个demo代码:

  1. package com.ldb.longdb.rabbitmqapp;
  2.  
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.util.Log;
  8. import android.widget.TextView;
  9.  
  10. import com.rabbitmq.client.AMQP;
  11. import com.rabbitmq.client.Channel;
  12. import com.rabbitmq.client.Connection;
  13. import com.rabbitmq.client.ConnectionFactory;
  14. import com.rabbitmq.client.DefaultConsumer;
  15. import com.rabbitmq.client.Envelope;
  16.  
  17. import java.io.IOException;
  18. import java.util.concurrent.TimeoutException;
  19.  
  20. public class MainActivity extends AppCompatActivity {
  21.  
  22. ConnectionFactory factory;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27.  
  28. //连接设置
  29. setupConnectionFactory();
  30. //用于从线程中获取数据,更新ui
  31. final Handler incomingMessageHandler = new Handler() {
  32. @Override
  33. public void handleMessage(Message msg) {
  34. String message = msg.getData().getString("msg");
  35. TextView tv = (TextView) findViewById(R.id.txtrabbitmqt);
  36. tv.append(message + '\n');
  37. Log.i("test", "msg:" + message);
  38. }
  39. };
  40. //开启消费者线程
  41. //subscribe(incomingMessageHandler);
  42. new Thread(new Runnable() {
  43. @Override
  44. public void run() {
  45. basicConsume(incomingMessageHandler);
  46. }
  47. }).start();
  48. }
  49.  
  50. /**
  51. * 连接设置
  52. */
  53. private void setupConnectionFactory() {
  54. factory = new ConnectionFactory();
  55. factory.setHost(服务器ip);
  56. factory.setPort(5672);
  57. factory.setUsername("longdb");
  58. factory.setPassword("***");
  59. }
  60.  
  61. /**
  62. * 收消息(从发布者那边订阅消息)
  63. */
  64. private void basicConsume(final Handler handler){
  65.  
  66. try {
  67. //连接
  68. Connection connection = factory.newConnection() ;
  69. //通道
  70. final Channel channel = connection.createChannel() ;
  71. //实现Consumer的最简单方法是将便捷类DefaultConsumer子类化。可以在basicConsume 调用上传递此子类的对象以设置订阅:
  72. channel.basicConsume("myqueue" , false , new DefaultConsumer(channel){
  73. @Override
  74. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  75. super.handleDelivery(consumerTag, envelope, properties, body);
  76.  
  77. String msg = new String(body) ;
  78. long deliveryTag = envelope.getDeliveryTag() ;
  79. channel.basicAck(deliveryTag , false);
  80. //从message池中获取msg对象更高效
  81. Message uimsg = handler.obtainMessage();
  82. Bundle bundle = new Bundle();
  83. bundle.putString("msg", msg);
  84. uimsg.setData(bundle);
  85. handler.sendMessage(uimsg);
  86.  
  87. }
  88. });
  89. } catch (IOException e) {
  90. e.printStackTrace();
  91. } catch (TimeoutException e) {
  92. e.printStackTrace();
  93. }
  94. }
  95. }

我是直接打包,然后自己手机安装测试。

测试步骤:1》app打开

2》springcloud服务(springcloud怎样发布消息,请看上一篇)运行,发送请求。

测试截图:

Android接收RabbitMQ消息。的更多相关文章

  1. Nodejs 接收RabbitMQ消息

    参考官方地址:https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html 关于C#消息发送端,请参考<c# RabbitMQ ...

  2. Rabbitmq消息队列(二) Hello World! 模拟简单发送接收

    1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,Rabbit ...

  3. RabbitMQ消息确认(发送确认,接收确认)

    前面几篇记录了收发消息的demo,今天记录下关于 消息确认方面的 问题. 下面是几个问题: 1.为什么要进行消息确认? 2.rabbitmq消息确认 机制是什么样的? 3.发送方如何确认消息发送成功? ...

  4. RabbitMQ学习系列三-C#代码接收处理消息

    RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理 http://www.80iter.com/blog/1438251320680361 http://www. ...

  5. openresty 学习笔记番外篇:python访问RabbitMQ消息队列

    openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...

  6. RabbitMQ消息队列(一): Detailed Introduction 详细介绍

     http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ...

  7. RabbitMQ消息队列1: Detailed Introduction 详细介绍

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  8. Net分布式系统之四:RabbitMQ消息队列应用

    消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前 ...

  9. rabbitmq消息队列——"topic型交换器"

    在之前的章节中我们改进了我们的日志系统,我们使用direct型交换器代替了只能盲目广播消息的fanout型交换器,这使得我们可以有选择性地接收日志. 尽管使用direct型交换器改进了我们的日志系统, ...

随机推荐

  1. 项目Beta冲刺(团队) --1/7

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺) 团队名称:葫芦娃队 作业目标:尽力完成 团队博客 队员学号 队员昵称 博客地址 041602421 der himmel ht ...

  2. CentOS7.6编译安装redis5.0

    yum install gcc wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar xvf redis-5.0.0.tar.gz ...

  3. docker的daemon配置

    文件:/etc/docker/daemon.json,如果没有就创建 修改后重启生效:systemctl restart docker 示例内容: { "registry-mirrors&q ...

  4. 小a与军团模拟器

    题目描述 9102 年伊始,小a觉得山羊模拟器,乞丐模拟器之类的都太低级了,所以想自己建立一个征战天下的军团模拟器. 军团模拟器是在一个城市数为N的国家中运行的,每个城市都会通过一些道路和其他所有城市 ...

  5. for循环:从键盘输入一个正整数n,

    #include<stdio.h>void main(){ int i,n,sum=0; //声明三个整型变量,并为变量sum初始化赋值为0// printf("Please e ...

  6. vue 首页导航+左侧菜单

    1. Mock.js 前后端分离开发开发过程当中,经常会遇到以下几个尴尬的场景: 1. 老大,接口文档还没输出,我的好多活干不下去啊! 2. 后端小哥,接口写好了没,我要测试啊! 前后端分离之后,前端 ...

  7. rust cargo 一些方便的三方cargo 子命令扩展

    内容来自cargo 的github wiki,记录下,方便使用 可选的列表 cargo-audit - Audit Cargo.lock for crates with security vulner ...

  8. cube.js 学习(十一)cube + gitbase 分析git 代码

    这个是一个简单的demo,使用gitbase+cube 分析git 仓库代码 需求 我们平时使用的gitlab,或者gogs 等git 仓库管理工具,有自己的管理强项,但是对于分析上可能就不是那么强大 ...

  9. numpy.linalg.svd函数

    转载自:python之SVD函数介绍 函数:np.linalg.svd(a,full_matrices=1,compute_uv=1) 参数: a是一个形如\((M,N)\)的矩阵 full_matr ...

  10. Docker for mac开启docker api调用

    docker-java 支持unix socket调用的 DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefa ...