服务端

pom文件

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

配置文件

server:port: 8022
spring:#给项目来个名字application:name: rabbitmq-consumer#配置rabbitMq 服务器rabbitmq:host: 127.0.0.1port: 5672username: snakeypassword: 123#虚拟host 可以不设置,使用server默认hostvirtual-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.#";@Beanpublic Queue pushMsgQueue() {return new Queue(RabbitMQConfig.QUEUE_MSG, false);}@BeanTopicExchange topExchange() {return new TopicExchange(EXCHANGE_TOP);}@BeanFanoutExchange fanoutExchange() {return new FanoutExchange(EXCHANGE_FANOUT);}// queue绑定exchange的时候 routingKey(with())中的参数很重要 决定着这个queue会接收哪些路由key的消息@BeanBinding bindingTopExchangeMessage() {return BindingBuilder.bind(pushMsgQueue()).to(topExchange()).with(QUEUE_MSG);}@BeanBinding 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 {@AutowiredRabbitTemplate mRabbitTemplate;@GetMapping("/send_msg")@ResponseBodypublic 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"));Map<String, Object> manMap = new HashMap<>();manMap.put("messageId", messageId);manMap.put("messageData", messageData);manMap.put("createTime", createTime);// 将消息转换为jsonObjectMapper 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_8targetCompatibility 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//连接设置setupConnectionFactory();//用于从线程中获取数据,更新uifinal Handler incomingMessageHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {String message = msg.getData().getString("msg");Log.i("test", "msg:" + message);}};//开启消费者线程//subscribe(incomingMessageHandler);new Thread(new Runnable() {@Overridepublic 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) {@Overridepublic 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();}}
}

通过RabbitMQ实现消息推送功能 可同时实现局域网推送和广域网推送相关推荐

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

    服务端 pom文件 org.springframework.boot spring-boot-starter-amqp org.springframework.boot spring-boot-sta ...

  2. 苹果12隔空投送显示无法连接服务器,iphone隔空投送功能无法正常使用解决办法_隔空投送功能打不开_3DM手游...

    iPhone手机中的"隔空投送"是一个快速便捷的无限传输功能,苹果用户可以使用"隔空投送"功能与附近的其它苹果设备快速共享照片.文档.应用.网页等等,非常的方便 ...

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

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

  4. 【第三方SDK】使用百度云推送实现推送功能详解

    之前介绍过如何使用shareSDK实现新浪微博分享功能,今天介绍如何使用百度云推送SDK实现Android手机后台推送功能. 运行效果如下 第一步,如果使用百度的SDK,当然要先成为百度的开发者啦,这 ...

  5. 使用百度云推送实现推送功能详解

     之前介绍过如何使用shareSDK实现新浪微博分享功能,今天介绍如何使用百度云推送SDK实现Android手机后台推送功能. 运行效果如下 第一步,如果使用百度的SDK,当然要先成为百度的开发者 ...

  6. 强制用户使用定向推送功能是什么意思?整改措施请收好

    最近无论是小米.应用宝等应用商店app上架,还是监管通报,都会看到"强制用户使用定向推送功能"这项违规,对于很多开发者来说,遇到这个问题根本无从下手,经常会发出强制用户使用定向推送 ...

  7. 百度站长平台恢复网站自动推送功能!

    继三月份百度莫名下线自动推送之后,最近自动推送又要重新激活了,百度站长平台发通知告知全面恢复"普通收录-自动推送"功能,站长们后续提交网站可以继续使用"自动推送" ...

  8. iPhone12隔空投送功能怎么开启和关闭

    iPhone12隔空投送功能是专门为用户提供资料传输的一个功能,仅限于iPhone用户之间使用. 很多刚使用iPhone12的用户对于隔空投送的功能的开启和关闭不是很熟悉,下面为大家具体讲解iPhon ...

  9. ASP.NET Core2基于RabbitMQ对Web前端实现推送功能

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用 ...

最新文章

  1. 你必须尝试的20个 Python 库
  2. 【机器学习入门到精通系列】蒙特卡罗方法简介和代码演示
  3. 1.8 欠拟合和过拟合-机器学习笔记-斯坦福吴恩达教授
  4. android调用百度活体检测接口,C#调用百度API实现活体检测的方法
  5. HANA Calculation View
  6. python docx 合并文档 图片_Python+pymupdf处理PDF文档案例6则
  7. x264中I,P,B帧和PTS,DTS的关系
  8. [Linux] Ubuntu下的文件比较工具--meld
  9. Bundle Adjustment简述(转载)
  10. CI框架 CodeIgniter 伪静态 htaccess设置和Nginx伪静态方法
  11. oracle中的case when then else end 用法
  12. 微信小程序 ----- this.getOpenerEventChannel is not a function
  13. 深入浅出设计模式之状态模式、代理模式
  14. HDFS的命令行使用【常用 hdfs 命令】
  15. Python: 模糊综合评价法
  16. 用java操作MySQL编写的高校水电费管理系统
  17. 计算机网络双绞线实验报告
  18. Hbase性能测试及优化过程记
  19. 共享充电宝还有市场嘛?
  20. 进程管理系统的设计与实现 SDUT 操作系统实训 项目 Java

热门文章

  1. 企业生产环境用户sudo权限集中管理项目方案案例
  2. nwjs桌面应用升级方案 桌面应用更新 支持增量全量更新
  3. abortonerror_java-更新Gradle依赖项后生成错误.嫌疑犯#1是...
  4. SPDK代码结构浅析
  5. 模电实验合集丨实验一 常用元器件的认识及基本仪器的使用
  6. C++:strcat、strcpy、strcmp、strupr、strlwr
  7. OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示
  8. 细说做外链效果最好的十大博客
  9. python数据透视_用pythonwin32com创建数据透视图
  10. Jquery鼠标hover移入移出事件