`
zhanshenlvbu
  • 浏览: 111395 次
社区版块
存档分类
最新评论

Flex消息例子(Producer和Consumer)

    博客分类:
  • Flex
阅读更多

      不多说,直接上代码,关于Flex消息的信息详见Flex消息服务的文章

 

1.前台Flex代码:

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
	xmlns:s="library://ns.adobe.com/flex/spark"
	xmlns:mx="library://ns.adobe.com/flex/mx"
	minWidth="955" minHeight="600"
	creationComplete="application1_creationCompleteHandler(event)">
	
	<fx:Declarations>
		<mx:RemoteObject id="ro" destination="neAlarmProducer"
		endpoint="http://ip:8080/appname/messagebroker/amf"
		showBusyCursor="true"/>
	</fx:Declarations>
	
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.messaging.ChannelSet;
			import mx.messaging.Consumer;
			import mx.messaging.channels.StreamingAMFChannel;
			import mx.messaging.events.ChannelEvent;
			import mx.messaging.events.ChannelFaultEvent;
			import mx.messaging.events.MessageEvent;
			import mx.messaging.events.MessageFaultEvent;
			import mx.rpc.remoting.RemoteObject;
			
			private var consumer:Consumer=new Consumer();
			
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				var myStreamingAMF:StreamingAMFChannel=new StreamingAMFChannel();
				myStreamingAMF.uri="http://ip:8080/appname/messagebroker/streamingamf";
				var channelSet:ChannelSet=new ChannelSet();
				channelSet.addChannel(myStreamingAMF);
				
				consumer.destination="testDataPush";
				consumer.subtopic="3d";
				
				consumer.channelSet=channelSet;
				consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
				consumer.addEventListener(ChannelFaultEvent.FAULT, fault);
				consumer.addEventListener(MessageFaultEvent.FAULT, fault2);
				
				consumer.subscribe();//订阅
			}
			
			
			
			private function fault(e:ChannelFaultEvent):void
			{
				trace(e.faultDetail, e.faultString);
			}
			
			private function fault2(e:MessageFaultEvent):void
			{
				trace(e.faultDetail, e.faultString);
			}
			
			private function messageHandler(event:MessageEvent):void
			{
				trace("-----messageHandler-");
				ta.text = ta.text + "获取的告警: " + event.message.body.description + " \n";
			}
			
			private function messageResult(event:MessageEvent):void
			{
				trace("-----messageResult-");				
			}
			
			private function connectHandler(event:ChannelEvent):void
			{
				trace("----connectHandler-");				
			}
			
			private function disconnectHandler(event:ChannelEvent):void
			{
				trace("----disconnectHandler-");				
			}
			
			protected function button1_clickHandler(event:MouseEvent):void
			{
				var ro:RemoteObject=new RemoteObject();
				ro.endpoint="http://ip:8080/appname/messagebroker/streamingamf";
				ro.destination="testPush";
				
				ro.test();
			}
		]]>
	</fx:Script>
	
	<s:Button label="test" click="button1_clickHandler(event)"/>
	<s:TextArea id="ta" x="10" y="42"/>
</s:Application>

 

 

2.message-config.xml中加入如下代码

    <destination id="testDataPush">  
        <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>  

 

3.service-config.xml中如果没有此通道,则加入此通道

    <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"/>
    </channel-definition>

 

4.spring配置文件中加入如下代码:

<!-- 定义 MessageBrokerFactoryBean 工厂 Bean 用于创建 MessageBroker,并为您的 Service Bean 提供绑定服务 -->
<bean id="_messageBroker" class="org.springframework.flex.core.MessageBrokerFactoryBean">  
   	<property name="servicesConfigPath" value="/WEB-INF/flex/services-config.xml" />  
</bean>
	
<!-- 引入 HandlerMapping 通过 MessageBrokerHandlerAdapter 将所有的 Servlet 请求 URL 映射到由 Spring 容器管理的 MessageBroker -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
	<property name="mappings">  
	       	<props>
	       		<prop key="/*amf*">_messageBroker</prop>
	       		<prop key="*.do">alarmShieldRuleController</prop>
	       	</props>
	</property> 
</bean> 
	
<bean id="defaultMessageTemplate" class="org.springframework.flex.messaging.MessageTemplate" /> 
	
<bean id="testPush" class="TestDataPush"><property name="messageTemplate" ref="defaultMessageTemplate"></property></bean>
	
<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter"/>
	
	
  

5.后台Java代码:

public class TestDataPush {  
    private MessageTemplate messageTemplate;  
    private AsyncMessage asyncMessage;  
  
    public TestDataPush() {  
        super();  
  
        String clientID = UUIDUtils.createUUID();  
        asyncMessage = new AsyncMessage();  
        asyncMessage.setDestination("testDataPush");  
        asyncMessage.setHeader("DSSubtopic", "3d");  
        asyncMessage.setClientId(clientID);  
        asyncMessage.setMessageId(UUIDUtils.createUUID());  
    }  
  
    public void test() {  
        System.out.println("test-------------------");  
        asyncMessage.setTimestamp(System.currentTimeMillis());  
        asyncMessage.setBody("test");  
        messageTemplate.getMessageBroker().routeMessageToService(asyncMessage, null);  
    }  
  
    public MessageTemplate getMessageTemplate() {  
        return messageTemplate;  
    }  
  
    public void setMessageTemplate(MessageTemplate messageTemplate) {  
        this.messageTemplate = messageTemplate;  
    }  
  
}  

 

分享到:
评论
2 楼 neusoft_jerry 2014-11-19  
neusoft_jerry 写道
上传代码要负责,起码自己运行一下,明显错误就上传,是对他人的不负责,同样也是对自己的不负责。


<bean id="testPush" class="TestDataPush"><property name="messageTemplate" ref="defaultMessageTemplate"></property></bean>
这个bean是目的bean,可却缺少<flex:remoting-destination/>
1 楼 neusoft_jerry 2014-11-19  
上传代码要负责,起码自己运行一下,明显错误就上传,是对他人的不负责,同样也是对自己的不负责。

相关推荐

    Flex基于Producer和Consumer方式的简易消息推送机制

    Flex中的消息推送机制是基于Producer和Consumer模型实现的,这种机制允许应用程序实时地发送和接收消息,常用于构建聊天室、通知系统等实时交互的应用。下面将详细解释Flex消息推送的相关知识点。 1. **Producer与...

    Producer/Consumer 多线程处理文件

    它通过共享缓冲区实现生产者线程(Producer Thread)和消费者线程(Consumer Thread)之间的协同工作。生产者负责生成数据并放入缓冲区,而消费者则负责从缓冲区取出数据进行处理。这种设计模式能够有效地避免生产者...

    Python-kafka集群搭建PythonAPI调用Producer和Consumer

    Kafka是一种分布式流处理平台,常用于实时数据处理和消息传递。在本教程中,我们将探讨如何搭建一个支持SASL(Simple Authentication and Security Layer)认证的Kafka集群,并使用Python API来创建Producer和...

    producer_consumer_v2.c

    别人的太贵了,自己写一份分享!c语言实现生产者消费者模型,支持设置生产者消费者线程数量,支持设置消息数量。消息的组织形式为链表。生产者生产消息和消费者处理消息分别需要对应的条件变量。代码编译方式见注释

    Kafka客户端producer/consumer样例

    Kafka客户端producer/consumer样例

    producer-consumer问题的分析和讨论

    3. `Producer.java`: 这个文件可能包含了生产者线程的实现。生产者线程会不断地生成数据(在这种情况下可能是事件对象),然后调用`EventStorage`的`put()`方法将数据放入队列。为了防止无限制地生成数据导致队列...

    consumer-producer.rar_producer_consumer.c_生产者消费者问题

    在这个问题中,有两组角色:生产者(Producer)和消费者(Consumer)。生产者负责创建或生成资源,而消费者则负责消费这些资源。在多线程环境下,为了确保数据的一致性和避免资源竞争,需要采取适当的同步机制。本...

    ProducerConsumer(生产者消费者问题的单线程模拟)

    在这个例子中,生产者和消费者通过互斥量和条件变量进行同步。当缓冲区满或空时,线程会等待并被其他线程唤醒。这种设计确保了数据的一致性,防止了竞争条件,使得程序在单线程环境中也能正确地执行生产者消费者问题...

    eureka-producer-consumer.zip

    本文将深入探讨如何使用Eureka构建Producer(服务提供者)和Consumer(服务消费者),并利用Feign和Ribbon进行远程调用。 1. **Eureka Server** Eureka Server作为服务注册中心,负责管理所有微服务实例的信息。每...

    ProducerConsumer.java

    The use of producer-consumer questions helps to better understand threads.

    flex的xiff访问openfire服务器的demo

    "flex的xiff访问openfire服务器的demo"是一个示例项目,展示了如何使用Flex和XIFF库连接到Openfire服务器并进行基本的聊天功能。通过这个示例,开发者可以学习以下关键知识点: 1. **Flex环境搭建**:首先需要安装...

    eureka-producer-consumer.rar

    本篇文章将深入探讨Eureka作为服务注册中心的工作原理、配置及其实现过程,帮助读者理解和掌握Eureka在实际项目中的应用。 1. **Eureka简介** Eureka是Netflix开源的一个基于REST的服务发现框架,它允许服务提供者...

    spring-kafka-producer-consumer-example_java_springboot_kafka_

    - `KafkaTemplate.send()`方法用于发送消息,可以通过指定主题和消息内容来完成发送操作。 3. **Kafka消费者(Consumer)**: - 消费者从Kafka主题中拉取消息。Spring Boot中的`@KafkaListener`注解用于定义消费...

    Peterson_producer_consumer.zip_c语言Peterson

    标题中的“Peterson_producer_consumer.zip_c语言Peterson”指的是一个使用C语言实现的基于Peterson算法的生产者-消费者问题实例。生产者-消费者问题是多线程编程中常见的同步问题,而Peterson算法是解决两个进程...

    ProducerConsumer-CSharp:C# 制作的 ProducerConsumer Demo

    ProducerConsumer 模型是计算机科学中的一个经典设计模式,它主要解决了多线程环境下的资源同步和通信问题。在 C# 中,我们可以利用 .NET Framework 提供的并发和线程管理工具来实现这个模型。本项目 "Producer...

    操作系统实验模拟生产者消费者问题

    PROGRAM NAME: PRODUCER_CONSUMER */ /* This program simulates two processes, producer which */ /* continues to produce message and put it into a buffer */ /* [implemented by PIPE], and consumer which ...

    Springboot集成Kafka实现producer和consumer的示例代码

    Spring Boot 集成 Kafka 可以帮助开发者轻松地在应用程序中实现消息生产和消费功能,利用 Kafka 的高性能和可扩展性。Kafka 是一个分布式流处理平台,它最初由 LinkedIn 开发,后来成为 Apache 软件基金会的顶级项目...

    producer-consumer-model:生产者-消费者模型

    在这个例子中,`ArrayBlockingQueue`作为共享资源,生产者和消费者通过它进行通信。生产者线程创建20个元素,而消费者线程无限循环消费队列中的元素,直至所有元素被消费完。 总的来说,生产者-消费者模型是一种...

    57119101_王晨阳_ProducerConsumer1

    在这个实验中,57119101_王晨阳_ProducerConsumer1通过Win32 API和Pthreads两种方式实现了这一问题的解决方案。 在实验目的部分,目标是理解并掌握Win32 API中的mutex锁和信号量(semaphores)的使用,以及如何利用...

    ProducerAndConsumer:生产者和消费者模型java实现

    此外,生产者和消费者模型在实际应用中非常广泛,比如在消息队列、数据库连接池、多线程任务调度等场景中都能找到它的身影。理解并熟练掌握这一设计模式,对于提升Java多线程编程的能力大有裨益。在分析和解决问题时...

Global site tag (gtag.js) - Google Analytics