Android接收RabbitMQ消息。
参考:https://blog.csdn.net/qq_36576738/article/details/83754621
我这android这边就不实现发布消息功能。因为我是在服务端那边推送消息。
开发工具android studio。
1》建好项目后添加包(目前最新的是5.7.0):
- dependencies {
- implementation 'com.rabbitmq:amqp-client:5.7.0'
- }
2》在主页面上加个TextView,用来显示服务端推送的消息。
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/txtrabbitmqt"
- android:text="rabbitmq"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- </android.support.constraint.ConstraintLayout>
3》连接服务器上的RabbitMq:
- /**
- * 连接设置
- */
- private void setupConnectionFactory() {
- factory = new ConnectionFactory();
- factory.setHost("服务器ip");
- factory.setPort(rabbitmq端口,默认5672);
- factory.setUsername("自己连接rabbitmq账号");
- factory.setPassword("自己连接rabbitmq的密码");
- }
4》编写订阅代码:
- /**
- * 收消息(从发布者那边订阅消息)
- */
- private void basicConsume(final Handler handler){
- try {
- //连接
- Connection connection = factory.newConnection() ;
- //通道
- final Channel channel = connection.createChannel() ;
- //实现Consumer的最简单方法是将便捷类DefaultConsumer子类化。可以在basicConsume 调用上传递此子类的对象以设置订阅:
- channel.basicConsume("myqueue" , false , new DefaultConsumer(channel){
- @Override
- public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
- super.handleDelivery(consumerTag, envelope, properties, body);
- String msg = new String(body) ;
- long deliveryTag = envelope.getDeliveryTag() ;
- channel.basicAck(deliveryTag , false);
- //从message池中获取msg对象更高效
- Message uimsg = handler.obtainMessage();
- Bundle bundle = new Bundle();
- bundle.putString("msg", msg);
- uimsg.setData(bundle);
- handler.sendMessage(uimsg);
- }
- });
- } catch (IOException e) {
- e.printStackTrace();
- } catch (TimeoutException e) {
- e.printStackTrace();
- }
- }
整个demo代码:
- package com.ldb.longdb.rabbitmqapp;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.support.v7.app.AppCompatActivity;
- import android.util.Log;
- import android.widget.TextView;
- import com.rabbitmq.client.AMQP;
- import com.rabbitmq.client.Channel;
- import com.rabbitmq.client.Connection;
- import com.rabbitmq.client.ConnectionFactory;
- import com.rabbitmq.client.DefaultConsumer;
- import com.rabbitmq.client.Envelope;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- public class MainActivity extends AppCompatActivity {
- ConnectionFactory factory;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //连接设置
- setupConnectionFactory();
- //用于从线程中获取数据,更新ui
- final Handler incomingMessageHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- String message = msg.getData().getString("msg");
- TextView tv = (TextView) findViewById(R.id.txtrabbitmqt);
- tv.append(message + '\n');
- Log.i("test", "msg:" + message);
- }
- };
- //开启消费者线程
- //subscribe(incomingMessageHandler);
- new Thread(new Runnable() {
- @Override
- public void run() {
- basicConsume(incomingMessageHandler);
- }
- }).start();
- }
- /**
- * 连接设置
- */
- private void setupConnectionFactory() {
- factory = new ConnectionFactory();
- factory.setHost(服务器ip);
- factory.setPort(5672);
- factory.setUsername("longdb");
- factory.setPassword("***");
- }
- /**
- * 收消息(从发布者那边订阅消息)
- */
- private void basicConsume(final Handler handler){
- try {
- //连接
- Connection connection = factory.newConnection() ;
- //通道
- final Channel channel = connection.createChannel() ;
- //实现Consumer的最简单方法是将便捷类DefaultConsumer子类化。可以在basicConsume 调用上传递此子类的对象以设置订阅:
- channel.basicConsume("myqueue" , false , new DefaultConsumer(channel){
- @Override
- public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
- super.handleDelivery(consumerTag, envelope, properties, body);
- String msg = new String(body) ;
- long deliveryTag = envelope.getDeliveryTag() ;
- channel.basicAck(deliveryTag , false);
- //从message池中获取msg对象更高效
- Message uimsg = handler.obtainMessage();
- Bundle bundle = new Bundle();
- bundle.putString("msg", msg);
- uimsg.setData(bundle);
- handler.sendMessage(uimsg);
- }
- });
- } catch (IOException e) {
- e.printStackTrace();
- } catch (TimeoutException e) {
- e.printStackTrace();
- }
- }
- }
我是直接打包,然后自己手机安装测试。
测试步骤:1》app打开
2》springcloud服务(springcloud怎样发布消息,请看上一篇)运行,发送请求。
测试截图:
Android接收RabbitMQ消息。的更多相关文章
- Nodejs 接收RabbitMQ消息
参考官方地址:https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html 关于C#消息发送端,请参考<c# RabbitMQ ...
- Rabbitmq消息队列(二) Hello World! 模拟简单发送接收
1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,Rabbit ...
- RabbitMQ消息确认(发送确认,接收确认)
前面几篇记录了收发消息的demo,今天记录下关于 消息确认方面的 问题. 下面是几个问题: 1.为什么要进行消息确认? 2.rabbitmq消息确认 机制是什么样的? 3.发送方如何确认消息发送成功? ...
- RabbitMQ学习系列三-C#代码接收处理消息
RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理 http://www.80iter.com/blog/1438251320680361 http://www. ...
- openresty 学习笔记番外篇:python访问RabbitMQ消息队列
openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ...
- RabbitMQ消息队列1: Detailed Introduction 详细介绍
1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...
- Net分布式系统之四:RabbitMQ消息队列应用
消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前 ...
- rabbitmq消息队列——"topic型交换器"
在之前的章节中我们改进了我们的日志系统,我们使用direct型交换器代替了只能盲目广播消息的fanout型交换器,这使得我们可以有选择性地接收日志. 尽管使用direct型交换器改进了我们的日志系统, ...
随机推荐
- 项目Beta冲刺(团队) --1/7
课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺) 团队名称:葫芦娃队 作业目标:尽力完成 团队博客 队员学号 队员昵称 博客地址 041602421 der himmel ht ...
- 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 ...
- docker的daemon配置
文件:/etc/docker/daemon.json,如果没有就创建 修改后重启生效:systemctl restart docker 示例内容: { "registry-mirrors&q ...
- 小a与军团模拟器
题目描述 9102 年伊始,小a觉得山羊模拟器,乞丐模拟器之类的都太低级了,所以想自己建立一个征战天下的军团模拟器. 军团模拟器是在一个城市数为N的国家中运行的,每个城市都会通过一些道路和其他所有城市 ...
- for循环:从键盘输入一个正整数n,
#include<stdio.h>void main(){ int i,n,sum=0; //声明三个整型变量,并为变量sum初始化赋值为0// printf("Please e ...
- vue 首页导航+左侧菜单
1. Mock.js 前后端分离开发开发过程当中,经常会遇到以下几个尴尬的场景: 1. 老大,接口文档还没输出,我的好多活干不下去啊! 2. 后端小哥,接口写好了没,我要测试啊! 前后端分离之后,前端 ...
- rust cargo 一些方便的三方cargo 子命令扩展
内容来自cargo 的github wiki,记录下,方便使用 可选的列表 cargo-audit - Audit Cargo.lock for crates with security vulner ...
- cube.js 学习(十一)cube + gitbase 分析git 代码
这个是一个简单的demo,使用gitbase+cube 分析git 仓库代码 需求 我们平时使用的gitlab,或者gogs 等git 仓库管理工具,有自己的管理强项,但是对于分析上可能就不是那么强大 ...
- numpy.linalg.svd函数
转载自:python之SVD函数介绍 函数:np.linalg.svd(a,full_matrices=1,compute_uv=1) 参数: a是一个形如\((M,N)\)的矩阵 full_matr ...
- Docker for mac开启docker api调用
docker-java 支持unix socket调用的 DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefa ...