Flex通过Blazeds利用Remoteservice与后台java消息推送

准备工作:Myeclipse中先建立一个Web project工程,然后导入Blazeds的文件,再转换为Flex项目类型。
前言:Flex 通过开源的BlazeDS消息服务来支持订阅及发布消息。这个消息服务管理着Flex客户端可以订阅或发布的目标地址。Flex提供了 Producer和Consumer这两个组件,让你用来向目标地址发送或订阅消息。如果要订阅消息,你就使用Consumer类的 subscribe()方法。当有消息发送到你订阅了的目标地址时,Consumer上就会触发message事件。
消息传递的目标地址是在Flex应用根下一个叫messaging-config.xml中配置的。一个目标地址配置的关键元素是在客户端和服务器建立交换数据的通道。使用BlazeDS,消息传递的目标地址通常使用流通道或者轮询通道。
1,使用流通道,服务器响应会一直保持开放状态,直到通道连接关闭,这样可以让服务器持续向客户端发送变化的数据。
2,如果数据没有立刻准备好(长轮询),就可以通过一个简单的时间间隔或者服务器等待时间来配置轮询通道。
修改两个配置文件services-config.xml,messaging-config.xml
services-config.xml加入以下代码:
  1. <channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel">
  2. <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/>
  3. <properties>
  4. <idle-timeout-minutes>0</idle-timeout-minutes>
  5. <max-streaming-clients>10</max-streaming-clients>
  6. <server-to-client-heartbeat-millis>5000
  7. </server-to-client-heartbeat-millis>
  8. <user-agent-settings>
  9. <user-agent match-on="MSIE" kickstart-bytes="2048" max-streaming-connections-per-session="1"/>
  10. <user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="1"/>
  11. </user-agent-settings>
  12. </properties>
  13. </channel-definition>
messaging-config.xml加入以下代码
  1. <destination id="message-data-feed">
  2. <properties>
  3. <server>
  4. <allow-subtopics>true</allow-subtopics>
  5. <subtopic-separator>.</subtopic-separator>
  6. </server>
  7. </properties>
  8. <channels>
  9. <channel ref="my-polling-amf" />
  10. <channel ref="my-streaming-amf" />
  11. </channels>
  12. </destination>
注:这里的id就是目标地址,也就是在flex代码中需要订阅消息的Consumer的属性destination所要设置的值,以及发布消息java后台代码AsyncMessage的setDestination()所要传递的参数,必须保证这三个地方名称一致。正是通过这一个目标地址,信息发布者就会将信息发布到该目标地址,然后所有已经设置订阅了该目标地址的flex就会触发MessageEvent.MESSAGE事件,来获取发布的消息。
Flex前端代码:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. xmlns:mx="library://ns.adobe.com/flex/mx"
  5. minWidth="955" minHeight="600">
  6. <fx:Script>
  7. <![CDATA[
  8. import mx.messaging.Channel;
  9. import mx.messaging.ChannelSet;
  10. import mx.messaging.Consumer;
  11. import mx.messaging.events.MessageEvent;
  12. import mx.rpc.events.ResultEvent;
  13. private var myConsumer:Consumer = new Consumer();
  14. //直接利用Remote来进行远程的消息调用
  15. //开始订阅消息
  16. protected function rbt_clickHandler(event:MouseEvent):void
  17. {
  18. // TODO Auto-generated method stub
  19. //利用远程调用来触发开始工作
  20. subMessage.startSendMessage("start");
  21. //准备开始订阅消息
  22. myConsumer.destination = " message -data-feed";
  23. //这里也要与后台的主题名称必须相同
  24. myConsumer.subtopic = "tick";
  25. myConsumer.channelSet = new ChannelSet(["my-streaming-amf"]);
  26. myConsumer.addEventListener(MessageEvent.MESSAGE, remote_messageHandler);
  27. myConsumer.subscribe();
  28. }
  29. //获取订阅的消息,以文本来显示显示
  30. private function remote_messageHandler(event:MessageEvent):void
  31. {
  32. var mess:String = event.message.body as String;
  33. demot.appendText("\n"+ mess);
  34. }
  35. //退订该消息
  36. protected function cbr_clickHandler(event:MouseEvent):void
  37. {
  38. subMessage.stopSendMessage("stop");
  39. myConsumer.unsubscribe(false);
  40. }
  41. protected function subMessage_resultHandler(event:ResultEvent):void
  42. {}
  43. ]]>
  44. </fx:Script>
  45. <fx:Declarations>
  46. <!—用来启动消息发布 -->
  47. <mx:RemoteObject id="subMessage" destination="RemoteMessage"
  48. result="subMessage_resultHandler(event)"> </mx:RemoteObject>
  49. </fx:Declarations>
  50. <s:TextArea x="445" y="42" width="257" id="demot"/>
  51. <s:Button x="445" y="210" label="订阅消息Remote" id="rbt" click="rbt_clickHandler(event)"/>
  52. <s:Button x="597" y="207" label="退订消息R" id="cbr" click="cbr_clickHandler(event)"/>
  53. </s:Application>
 
Java后台代码:
  1. package com.whut.daemon;
  2. import flex.messaging.MessageBroker;
  3. import flex.messaging.messages.AsyncMessage;
  4. import flex.messaging.util.UUIDUtils;
  5. public class DaemonMessage {
  6. private static FeedThread thread;
  7. //开始传递消息
  8. public void startSendMessage(String flags)
  9. {
  10. if (thread == null)
  11. {
  12. thread = new FeedThread();
  13. thread.start();
  14. }
  15. }
  16. //停止消息发布
  17. public void stopSendMessage(String flags)
  18. {
  19. thread.running=false;
  20. thread=null;
  21. }
  22. public static class FeedThread extends Thread
  23. {
  24. public boolean running = true;
  25. public void run() {
  26. MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
  27. String clientID = UUIDUtils.createUUID();
  28. System.out.println("clientID="+clientID);
  29. while (running) {
  30. //异步消息
  31. AsyncMessage msg = new AsyncMessage();
  32. msg.setDestination("tick-data-feed111");
  33. msg.setHeader("DSSubtopic", "tick");
  34. msg.setClientId(clientID);
  35. msg.setMessageId(UUIDUtils.createUUID());
  36. msg.setTimestamp(System.currentTimeMillis());
  37. msg.setBody("hello");
  38. msgBroker.routeMessageToService(msg, null);
  39. try {
  40. Thread.sleep(500);
  41. } catch (InterruptedException e) {}}}}}
remoting-config.xml加入以下代码:
  1. <destination id="RemoteMessage">
  2. <properties>
  3. <source>com.whut.daemon.DaemonMessage</source>
  4. </properties>
  5. </destination>
 

转载于:https://blog.51cto.com/computerdragon/1143326

Flex通过Blazeds利用Remoteservice与后台java消息推送相关推荐

  1. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  2. java 消息推送_hanbo-push分布式消息推送、IM服务

    系统概览 app接入除了接入restApi(push-admin)之外,还需要兼容connector(push-admin的client,用于和push-server通信)的通信协议. 基于proto ...

  3. 如何利用springboot快速搭建一个消息推送系统

    最近在完善毕设的路上,由于是设计一个远程控制物联网系统,所以服务端到硬件我选用了MQTT协议.因为MQTT的发布/订阅模式很适合这种场景.接下来就来聊聊遇到的一些问题以及解决思路吧. 毕设技术栈:sp ...

  4. java 消息推送的几种方式比较

    引言: 在互联网高速发展的时代里,web应用大有取代桌面应用的趋势,不必再去繁琐的安装各种软件,只需一款主流浏览器即可完成大部分常规操作,这些原因都在吸引着软件厂商和消费者.而随着各大厂商浏览器版本的 ...

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

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

  6. apiCloud jpush java 消息推送使用

    1.apicloud创建项目,以创建项目的可略过此步骤 2.集成jpush模块 3.生成证书并复制包名(极光官网创建项目时会用到) 4.进入极光官网http://www.jiguang.cn 注册成为 ...

  7. java消息推送与接收

    package com.zl;import java.net.ServerSocket; import java.net.Socket; import org.apache.commons.mvc.u ...

  8. java消息推送怎么实现_调用钉钉接口实现机器人推送消息

    一.摘要 现实交易中为了能及时了解发明者量化机器人交易状态,有时候我们需要将机器人所执行的交易结果发送到微信.邮箱.短信等等.但每天上百条各种各样的信息,使得对这些信息已经不敏感,导致重要的信息不能及 ...

  9. java消息推送怎么实现_PHP实现的消息实时推送功能

    本文实例讲述了PHP实现的消息实时推送功能.分享给大家供大家参考,具体如下: 入口文件index.html <!DOCTYPE HTML> <html> <head> ...

最新文章

  1. 【APP】squid 3.0反向代理配置
  2. 数据结构-栈(C语言代码)
  3. c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)
  4. 遥感RS植被指数大全整理
  5. 两个瓶子水怎样一样多_同事每天比我多睡两个小时!省下70万买了地铁站附近房子 杭州姑娘却感叹买房时一定是脑子进了水……...
  6. 后端连接oracle,【后端开发】php怎么远程连接oracle
  7. clickhouse修改表的TTL
  8. 手机版wps怎么制作折线图_手机简历制作 | 微信怎么在线制作简历
  9. c语言如何反复执行一段程序,C语言中重复执行程序的问题
  10. hive中:row_number()排序函数的使用
  11. 传染病模型(1)——SI模型及matlab详解
  12. 神经网络翻译是什么意思,神经网络用英文怎么说
  13. STM32-IIC模拟从模式
  14. airbnb房东_麻烦找房东侵入式监视筛查方法可能是罪魁祸首
  15. 美的java面试经验
  16. 通过百度地图API获取用户所在地理位置信息
  17. QQ 空间备份神器,一键备份你所有的青春!
  18. 程序员如何承接软件外包项目(转)
  19. 什么是SOA?什么是Dubbo?
  20. 一般计算机工作的电压,计算机的工作环境

热门文章

  1. sqlite_orm sync_schema源码即翻译
  2. 伤肾的九个恶习及解决办法(图)
  3. linux下如何做ghost,又简单又方便,很实用的方法!!!
  4. 开发优秀产品的六大秘诀
  5. 【ffmpeg for wince】音视频编解码多平台移植(for window/wince))ffmpeg
  6. 《千只鹤》:面对爱,我们永远还行走在成长的路上 ...
  7. CSS 中 的 margin、border、padding 区别 (内边距、外边距)
  8. js之base64上传图片
  9. ASP.NET MVC中controller和view相互传值的方式
  10. centos7-安装mysql5.6.36