您的位置:首页 > 其它

blazeds实现消息推送的实例

2010-01-14 09:48 274 查看
package com;

import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;

/**
* @文件名称: MessageBroker.java
* @文件描述: 实现消息推送

* @版权所有: (C)2009-2010
* @完成日期: 2010-1-11
* @公司:
* @作者: 王刚
* @版本: v1.0
*/
public class MessageFactory {
private String _DESTINATION_NAME = "feed";

public void sendMessage(String message,String subtopic) {
String clientID = UUIDUtils.createUUID(false);
MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
AsyncMessage msg = new AsyncMessage();
msg.setDestination(_DESTINATION_NAME);
msg.setHeader("DSSubtopic", subtopic);
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(message);
msgBroker.routeMessageToService(msg, null);

}
public String get_DESTINATION_NAME() {
return _DESTINATION_NAME;
}
public void set_DESTINATION_NAME(String _destination_name) {
_DESTINATION_NAME = _destination_name;
}

}

/*
* Used to push data to the client.
*/

package com;

import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;

public class TestMessage extends Thread
{
public boolean running = true;

private static int _FEED_INTERVAL = 10000; // Interval in milliseconds to push the data.
private MessageFactory messageFactory;

public void run()
{
String clientID = UUIDUtils.createUUID(false);
while (running)
{

System.out.print("/////////////////消息测试77------");

messageFactory=new MessageFactory();
messageFactory.set_DESTINATION_NAME("feed");
messageFactory.sendMessage("群消息推!!001", "allids");
messageFactory.sendMessage("组消息推!!002", "groupids");
messageFactory.sendMessage("个人消息推!!003", "aloneids");

try
{
Thread.sleep(_FEED_INTERVAL);
}
catch (InterruptedException e)
{
}

}
}
}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<display-name>BlazeDS</display-name>
<description>BlazeDS Application</description>

<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>

<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

<!-- for WebSphere deployment, please uncomment -->
<!--
<resource-ref>
<description>Flex Messaging WorkManager</description>
<res-ref-name>wm/MessagingWorkManager</res-ref-name>
<res-type>com.ibm.websphere.asynchbeans.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
-->

</web-app>

messaging-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service"
class="flex.messaging.services.MessageService">

<adapters>
<adapter-definition id="actionscript"
class="flex.messaging.services.messaging.adapters.ActionScriptAdapter"
default="true" />
<!--<adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter" default="true"/>-->
</adapters>
<destination id="security-check">
<properties>
<server>
<allow-subtopics>true</allow-subtopics>
<subtopic-separator>.</subtopic-separator>
</server>
</properties>
<channels>
<channel ref="my-polling-amf" />
<channel ref="my-streaming-amf" />
</channels>
</destination>

<destination id="feed">
<properties>
<network>
<session-timeout>0</session-timeout>
</network>
<server>
<allow-subtopics>true</allow-subtopics>
<subtopic-separator>.</subtopic-separator>
<max-cache-size>1000</max-cache-size>
<message-time-to-live>0</message-time-to-live>
<durable>false</durable>
</server>
</properties>
<channels>
<channel ref="my-polling-amf" />
<channel ref="my-streaming-amf" />
</channels>
</destination>

<default-channels>
<channel ref="my-polling-amf" />
</default-channels>

</service>

services-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

<services>
<service-include file-path="remoting-config.xml" />
<service-include file-path="messaging-config.xml" />
<!--
<service-include file-path="remoting-config-demo.xml" />
<service-include file-path="proxy-config.xml" />
<service-include file-path="messaging-config.xml" />
-->
</services>

<security>
<login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
<!-- Uncomment the correct app server
<login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
<login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>
<login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>

<login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
-->

<!--
<security-constraint id="basic-read-access">
<auth-method>Basic</auth-method>
<roles>
<role>guests</role>
<role>accountants</role>
<role>employees</role>
<role>managers</role>
</roles>
</security-constraint>
-->
</security>

<channels>

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>

<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
<properties>
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>

<channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>true</polling-enabled>
<polling-interval-seconds>4</polling-interval-seconds>
</properties>
</channel-definition>
<channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/>
<properties>
<idle-timeout-minutes>0</idle-timeout-minutes>
<max-streaming-clients>10</max-streaming-clients>
<server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis>
<user-agent-settings>
<user-agent match-on="MSIE" kickstart-bytes="2048" max-streaming-connections-per-session="10"/>
<user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="10"/>
</user-agent-settings>
</properties>
</channel-definition>
<!--
<channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
</channel-definition>

<channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
<properties>
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>
-->
</channels>

<logging>
<target class="flex.messaging.log.ConsoleTarget" level="Error">
<properties>
<prefix>[BlazeDS] </prefix>
<includeDate>false</includeDate>
<includeTime>false</includeTime>
<includeLevel>false</includeLevel>
<includeCategory>false</includeCategory>
</properties>
<filters>
<pattern>Endpoint.*</pattern>
<pattern>Service.*</pattern>
<pattern>Configuration</pattern>
</filters>
</target>
</logging>

<system>
<redeploy>
<enabled>false</enabled>
<!--
<watch-interval>20</watch-interval>
<watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
<touch-file>{context.root}/WEB-INF/web.xml</touch-file>
-->
</redeploy>
</system>

</services-config>

flex

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="init()"
height="150"
width="300"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.messaging.FlexClient;
import mx.messaging.ChannelSet;
import mx.controls.Alert;
import mx.messaging.Consumer;
import mx.messaging.events.MessageEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.mxml.RemoteObject;

private var allSubtipic:String="allids";
private var groupSubtipic:String="groupids";
private var aloneSubtipic:String="aloneids";
private var destination:String="feed";

private function init():void
{
if (Application.application.parameters.allSubtipic)
allSubtipic=Application.application.parameters.allSubtipic;
if (Application.application.parameters.groupSubtipic)
groupSubtipic=Application.application.parameters.groupSubtipic;
if (Application.application.parameters.aloneSubtipic)
aloneSubtipic=Application.application.parameters.aloneSubtipic;
if (Application.application.parameters.destination)
destination=Application.application.parameters.destination;

allSend();
groupSend();
aloneSend();
ExternalInterface.call("messageTest", "消息")
}

/**
* 群消息
* */
public function allSend():void
{
var consumer:Consumer=new Consumer();
consumer.destination=destination;
consumer.subtopic=allSubtipic;
consumer.addEventListener(MessageEvent.MESSAGE, taskSendMessageHandler);
consumer.subscribe();
}

public function groupSend():void
{
var consumer:Consumer=new Consumer();
consumer.destination=destination;
consumer.subtopic=groupSubtipic;
consumer.addEventListener(MessageEvent.MESSAGE, taskSendMessageHandler);
consumer.subscribe();
}

public function aloneSend():void
{
var consumer:Consumer=new Consumer();
consumer.destination=destination;
consumer.subtopic=aloneSubtipic;
consumer.addEventListener(MessageEvent.MESSAGE, taskSendMessageHandler);
consumer.subscribe();
}

private function taskSendMessageHandler(event:MessageEvent):void
{
var mess:String=event.message.body.toString();
Alert.show(mess);
trace(mess);
var s:String=ExternalInterface.call("messageTest", mess);
trace(s + "--------");

}
]]>
</mx:Script>
<mx:Button click="ExternalInterface.call('messageTest','消息')"/>
<mx:Label x="123.5"
y="10"
text="消息测试"
fontSize="12"/>
</mx:Application>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: