服务端

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实现消息推送功能 可同时实现局域网推送和广域网推送...相关推荐

  1. 通过RabbitMQ实现消息推送功能 可同时实现局域网推送和广域网推送

    服务端 pom文件 <dependency><groupId>org.springframework.boot</groupId><artifactId> ...

  2. 用rabbitmq实现消息重发的功能

    前言: 在开发工作中,有很多时候会遇到要把数据同步给其他部门或三方的场景,这个时候光写一个同步接口是不太稳定的,因为有很多因素会导致同步接口运行失败或未运行,比如调接口之前的代码出现了bug,异常被t ...

  3. android极光推送 消息穿透广告弹窗,极光推送弹出两次消息,请大佬们帮忙指点迷津...

    本帖最后由 m143 于 2021-3-19 11:55 编辑 1.打开APP ,从后端发送推送,APP连续收到2条推送信息2. 打开APP ,APP在后台运行,从后端发送推送(收到一条消息),点击消 ...

  4. RabbitMQ实现消息的延迟推送或延迟发送

    使用RabbitMQ实现消息的延迟消费 文章目录 前言 一.RabbitMQ是什么? 1.RabbitMQ简介 2.RabbitMQ的优点 3.常用组件 4.RabbitMQ的结构图 5.交换机的类型 ...

  5. iOS和Android即时通讯开发时后台实时消息推送的原理和区别

    iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本 ...

  6. Spring Cloud Stream消息中间件通过RabbitMQ实现消息推送

    一.Spring Cloud Stream是什么 Spring Cloud Stream 是一个构建消息驱动微服务的框架. Spring Cloud Stream解决了开发人员无感知的使用消息中间件的 ...

  7. 国内APP消息推送机制以及微信消息延迟问题剖析

    转自:https://club.huawei.com/thread-15878044-1-1.html 一.前言 随着安卓手机以及QQ/微信/支付宝/滴滴出行/美图外卖等一大批移动通信/移动消费应用的 ...

  8. miui微博html5版关闭,MIUI10迎来最后一波开发版推送 可关闭广告消息

    原标题:MIUI10迎来最后一波开发版推送 可关闭广告消息 8月30日,小米MIUI10最后一波开发版正式外发公测.按惯例,这也是MIUI11保密功能进版测试的一个重要信号.本次开发版主要以修复和优化 ...

  9. 华为android9.0升级,华为官方更新消息:这几款手机9月5日分批推送安卓9.0系统升级...

    原标题:华为官方更新消息:这几款手机9月5日分批推送安卓9.0系统升级 随着手机技术的不断发展,不仅手机更新换代加快,就连手机系统也在快速更新,可能很多花粉刚刚升级了基于Android8.0的EMUI ...

最新文章

  1. 在C#中利用DirectX实现声音播放(winForm)
  2. 关于 Kubernetes 规划的灵魂 n 问
  3. 信息系统项目管理师之风险管理
  4. SpringBoot-@RequestParam
  5. 【遥感数字图像处理】基础知识:第四章 遥感图像辐射纠正
  6. 与服务器传文件格式,客户端如何向服务器传文件格式
  7. python+selenium 爬携程机票价格
  8. 解决E1776:无法引用 函数 “A::A(const A)“ (已隐式声明) -- 它是已删除的函数
  9. 华为 该软件被检测为风险软件_美团被华为标记为“病毒软件”,用户表示懵了,华为官方出面解释...
  10. html{-webkit-text-size-adjust:none;}(取消浏览器最小字体限制)
  11. 基础网络函数介绍及其Cpp实例(C++)
  12. 360全景拼接 opencv_广州海珠区专业改全景,丰田塞纳改3D全景,360全景行车记录仪的功能...
  13. cl.g4r.win index.php,win7 wamp环境配置Oracle数据库连接
  14. 盛大易宝只是陈天桥的梦而已
  15. 10098 - Generating Fast
  16. 复盘:C语言中int a[][3]={1,2,3,4,5,6,7,8}什么意思,int a[3][]又是什么意思,结果为10的是
  17. python数据分析与挖掘实战(2)帕累托法则菜品盈利分析与相关性分析
  18. 黑提葡萄水果宣传文案模版,水果店文案黑提葡萄
  19. Jquery图片轮播(连续滚动+突出显示)
  20. Android Things:外设I/O接口-GPIO

热门文章

  1. 【华为手机】如何关闭/卸载下滑出现的智慧搜索
  2. 用nat123+tomcat 发布网站
  3. Windows server远程桌面配置【只需两步的极简快速版】
  4. 使用Android studio转换Jar包时,遇到的一个问题Could not find tools.jar.
  5. 利用ArcGIS结合DEM提取小流域单元
  6. JAVA中日期转换SimpleDateFormat和DateTimeFormatter
  7. 2022-2028全球直刀切割机行业调研及趋势分析报告
  8. 校园网站毕业设计,校园网站设计与实现,校园网站论文作品参考
  9. 网页轮显幻灯片 php,dedecms 织梦幻灯片/轮播图管理插件
  10. PHP程序员上岗后的工作都有哪些内容?我来和大家分享一下