android 局域网 推送,通过RabbitMQ实现消息推送功能 可同时实现局域网推送和广域网推送...
服务端
pom文件
org.springframework.boot
spring-boot-starter-amqp
org.springframework.boot
spring-boot-starter-web
配置文件
server:
port: 8022
spring:
#给项目来个名字
application:
name: rabbitmq-consumer
#配置rabbitMq 服务器
rabbitmq:
host: 127.0.0.1
port: 5672
username: snakey
password: 123
#虚拟host 可以不设置,使用server默认host
virtual-host: /
RabbitMQ配置文件
package com.xiaoge.mqdemo.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 作者:guoyzh
* 时间:2019/10/13 13:22
* 功能:测试mq
*/
@Configuration
public class RabbitMQConfig {
// 设置使用的交换机
public final static String EXCHANGE_TOP = "test";
public final static String EXCHANGE_FANOUT = "amq.fanout";
// 设置队列
public final static String QUEUE_MSG = "topic.msg";
public final static String QUEUE_MSG_ALL = "topic.msg.all";
public final static String QUEUE_ALL = "topic.#";
@Bean
public Queue pushMsgQueue() {
return new Queue(RabbitMQConfig.QUEUE_MSG, false);
}
@Bean
TopicExchange topExchange() {
return new TopicExchange(EXCHANGE_TOP);
}
@Bean
FanoutExchange fanoutExchange() {
return new FanoutExchange(EXCHANGE_FANOUT);
}
// queue绑定exchange的时候 routingKey(with())中的参数很重要 决定着这个queue会接收哪些路由key的消息
@Bean
Binding bindingTopExchangeMessage() {
return BindingBuilder.bind(pushMsgQueue()).to(topExchange()).with(QUEUE_MSG);
}
@Bean
Binding bindingFanoutExchangeMessage() {
return BindingBuilder.bind(pushMsgQueue()).to(fanoutExchange());
}
}
接口
package com.xiaoge.mqdemo.web;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xiaoge.mqdemo.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 作者:guoyzh
* 时间:2019/10/13 13:24
* 功能:
*/
@Controller
public class TestController {
@Autowired
RabbitTemplate mRabbitTemplate;
@GetMapping("/send_msg")
@ResponseBody
public String sendTopicMessage() {
// 组建消息
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: 分诊室1号发来请求";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
MapmanMap = new HashMap<>();
manMap.put("messageId", messageId);
manMap.put("messageData", messageData);
manMap.put("createTime", createTime);
// 将消息转换为json
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = null;
try {
writeValueAsString = mapper.writeValueAsString(manMap);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// 发送消息
mRabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_TOP, RabbitMQConfig.QUEUE_MSG_ALL, writeValueAsString);
return "ok";
}
}
Android
gradle
implementation 'com.rabbitmq:amqp-client:4.4.1'
gradle指定jdk版本 放在android{…}中
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
界面功能
package com.hencego.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
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.UUID;
import java.util.concurrent.TimeoutException;
import androidx.appcompat.app.AppCompatActivity;
/**
* 作者:guoyzh
* 时间:2019/10/13 15:41
* 功能:
*/
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");
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("192.168.1.222");
factory.setPort(5672);
factory.setUsername("snakey");
factory.setPassword("123");
factory.setVirtualHost("/");
}
/**
* 收消息(从发布者那边订阅消息)
*/
private void basicConsume(final Handler handler) {
try {
// 连接
Connection connection = factory.newConnection();
// 通道
final Channel channel = connection.createChannel();
String uuid = String.valueOf(UUID.randomUUID());
String QUEUE_NAME = "topic." + uuid;
// 创建非永久队列
channel.queueDeclare(QUEUE_NAME, false, false, true, null);
// 绑定队列到交换机
channel.queueBind(QUEUE_NAME, "test", "topic.#");
// 接收消息 实现Consumer的最简单方法是将便捷类DefaultConsumer子类化。可以在basicConsume 调用上传递此子类的对象以设置订阅:
channel.basicConsume(QUEUE_NAME, 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();
}
}
}
android 局域网 推送,通过RabbitMQ实现消息推送功能 可同时实现局域网推送和广域网推送...相关推荐
- 通过RabbitMQ实现消息推送功能 可同时实现局域网推送和广域网推送
服务端 pom文件 <dependency><groupId>org.springframework.boot</groupId><artifactId> ...
- 用rabbitmq实现消息重发的功能
前言: 在开发工作中,有很多时候会遇到要把数据同步给其他部门或三方的场景,这个时候光写一个同步接口是不太稳定的,因为有很多因素会导致同步接口运行失败或未运行,比如调接口之前的代码出现了bug,异常被t ...
- android极光推送 消息穿透广告弹窗,极光推送弹出两次消息,请大佬们帮忙指点迷津...
本帖最后由 m143 于 2021-3-19 11:55 编辑 1.打开APP ,从后端发送推送,APP连续收到2条推送信息2. 打开APP ,APP在后台运行,从后端发送推送(收到一条消息),点击消 ...
- RabbitMQ实现消息的延迟推送或延迟发送
使用RabbitMQ实现消息的延迟消费 文章目录 前言 一.RabbitMQ是什么? 1.RabbitMQ简介 2.RabbitMQ的优点 3.常用组件 4.RabbitMQ的结构图 5.交换机的类型 ...
- iOS和Android即时通讯开发时后台实时消息推送的原理和区别
iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本 ...
- Spring Cloud Stream消息中间件通过RabbitMQ实现消息推送
一.Spring Cloud Stream是什么 Spring Cloud Stream 是一个构建消息驱动微服务的框架. Spring Cloud Stream解决了开发人员无感知的使用消息中间件的 ...
- 国内APP消息推送机制以及微信消息延迟问题剖析
转自:https://club.huawei.com/thread-15878044-1-1.html 一.前言 随着安卓手机以及QQ/微信/支付宝/滴滴出行/美图外卖等一大批移动通信/移动消费应用的 ...
- miui微博html5版关闭,MIUI10迎来最后一波开发版推送 可关闭广告消息
原标题:MIUI10迎来最后一波开发版推送 可关闭广告消息 8月30日,小米MIUI10最后一波开发版正式外发公测.按惯例,这也是MIUI11保密功能进版测试的一个重要信号.本次开发版主要以修复和优化 ...
- 华为android9.0升级,华为官方更新消息:这几款手机9月5日分批推送安卓9.0系统升级...
原标题:华为官方更新消息:这几款手机9月5日分批推送安卓9.0系统升级 随着手机技术的不断发展,不仅手机更新换代加快,就连手机系统也在快速更新,可能很多花粉刚刚升级了基于Android8.0的EMUI ...
最新文章
- 在C#中利用DirectX实现声音播放(winForm)
- 关于 Kubernetes 规划的灵魂 n 问
- 信息系统项目管理师之风险管理
- SpringBoot-@RequestParam
- 【遥感数字图像处理】基础知识:第四章 遥感图像辐射纠正
- 与服务器传文件格式,客户端如何向服务器传文件格式
- python+selenium 爬携程机票价格
- 解决E1776:无法引用 函数 “A::A(const A)“ (已隐式声明) -- 它是已删除的函数
- 华为 该软件被检测为风险软件_美团被华为标记为“病毒软件”,用户表示懵了,华为官方出面解释...
- html{-webkit-text-size-adjust:none;}(取消浏览器最小字体限制)
- 基础网络函数介绍及其Cpp实例(C++)
- 360全景拼接 opencv_广州海珠区专业改全景,丰田塞纳改3D全景,360全景行车记录仪的功能...
- cl.g4r.win index.php,win7 wamp环境配置Oracle数据库连接
- 盛大易宝只是陈天桥的梦而已
- 10098 - Generating Fast
- 复盘:C语言中int a[][3]={1,2,3,4,5,6,7,8}什么意思,int a[3][]又是什么意思,结果为10的是
- python数据分析与挖掘实战(2)帕累托法则菜品盈利分析与相关性分析
- 黑提葡萄水果宣传文案模版,水果店文案黑提葡萄
- Jquery图片轮播(连续滚动+突出显示)
- Android Things:外设I/O接口-GPIO
热门文章
- 【华为手机】如何关闭/卸载下滑出现的智慧搜索
- 用nat123+tomcat 发布网站
- Windows server远程桌面配置【只需两步的极简快速版】
- 使用Android studio转换Jar包时,遇到的一个问题Could not find tools.jar.
- 利用ArcGIS结合DEM提取小流域单元
- JAVA中日期转换SimpleDateFormat和DateTimeFormatter
- 2022-2028全球直刀切割机行业调研及趋势分析报告
- 校园网站毕业设计,校园网站设计与实现,校园网站论文作品参考
- 网页轮显幻灯片 php,dedecms 织梦幻灯片/轮播图管理插件
- PHP程序员上岗后的工作都有哪些内容?我来和大家分享一下