`

Producer Consumer实例

    博客分类:
  • flex
阅读更多
Producer Consumer实例
在上一篇文章(blazeds学习笔记四 Producer Consumer讲解)我们粗略了解一下在Flex里Message通讯中Producer组件和Consumer组 件的简单理论知识,这篇文章中让我们一起来看一个简单的实例,看看Producer组件和Consumer组件的具体使用!

上代码,大部分都在注释中解释的很清楚了!!!(如果哪里讲的不清楚或者有错误,欢迎与我们沟通交流!)

ChatRoom.mxml

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” creationComplete=”initChatRoom()” layout=”absolute”>
<mx:Script>
  <![CDATA[
   //导入相应的类
   import mx.controls.Alert;
   import mx.messaging.messages.AsyncMessage;
   import mx.messaging.events.MessageEvent;
   import mx.messaging.events.MessageAckEvent;
   import mx.messaging.events.MessageFaultEvent;
   import mx.rpc.Fault;
   import mx.messaging.messages.AcknowledgeMessage;
   import mx.messaging.Consumer;
   import mx.messaging.Producer;
  
   //声明Producer和Consumer
   private var producor:Producer;
   private var consumer:Consumer;
  
   //程序在creationComplete后自动调用
   private function initChatRoom():void
   {
    initProducer();
    initConsumer();
    //为“发送”按钮的单击事件注册处理函数
    sendBtn.addEventListener(MouseEvent.CLICK,sendBtnHandler);
   }
   //初始化一个Producer用来发送消息
   private function initProducer():void
   {
    //实例化一个Producer用于发送消息
    producor = new Producer();
    //设置消息服务的目标,应与messaging-config.xml文件中的destination条目id相匹配
    producor.destination = "chatRoom";
    //为acknowledge事件注册监听函数,当收到已发送消息的确认结果时触发该事件
    producor.addEventListener(MessageAckEvent.ACKNOWLEDGE,ackMessageHandler);
    //为fault事件注册监听函数,当发生消息错误时调度fault事件
    producor.addEventListener(MessageFaultEvent.FAULT,faultMessageHandler);
    //使用的远程目标的子主题
    producor.subtopic = "topic";
   }
   //初始化一个Consumer用来订阅、接受消息
   private function initConsumer():void
   {
    //实例化一个Consumer用于订阅和接收消息
    consumer = new Consumer();
    //设置消息服务的目标,该值应与messaging-config.xml文件中的destination条目id相匹配。
    consumer.destination = "chatRoom";
    //为message事件注册监听函数,当Consumer接收到消息时调度
    consumer.addEventListener(MessageEvent.MESSAGE,messageHandler);
    //使用的远程目标的子主题
    consumer.subtopic = "topic";
    //订阅远程目标
    consumer.subscribe();
   }
   //acknowledge事件处理方法,消息发送成功调用该方法
   private function ackMessageHandler(event:MessageAckEvent):void
   {
    trace("消息发送成功...");
   }
   //fault事件处理方法,消息发送失败将调用该方法
   private function faultMessageHandler(event:MessageFaultEvent):void
   {
    Alert.show("信息发送失败","提示");
   }
   //message事件处理方法
   private function messageHandler(event:MessageEvent):void
   {
    output.text += event.message.headers.nickName + " 说: " + event.message.body.content + "\n";
   }
   //点击“发送”按钮执行该方法
   private function sendBtnHandler(event:MouseEvent = null):void
   {
    //实例化一个AsyncMessage用于接收creatMessage()方法返回的AsyncMessage实例
    var asyncMessage:AsyncMessage = creatMessage();
    //用producor的send方法发送一条消息
    producor.send(asyncMessage);
    //将输入框清空
    input.text = "";
    //调用setChatRoomFocus()方法设置程序的焦点
    setChatRoomFocus();
   }
   //创建一条消息并返回该消息
   private function creatMessage():AsyncMessage
   {
    //声明并实例化一个AsyncMessage实例asyncMessage
    var asyncMessage:AsyncMessage = new AsyncMessage();
    //在asyncMessage的headers中添加信息
    asyncMessage.headers.nickName = "nirvana";
    //在asyncMessage的body中添加信息
    asyncMessage.body.content = input.text;
    //返回AsyncMessage实例asyncMessage
    return asyncMessage;
   }
   //设置焦点
   private function setChatRoomFocus():void
   {
    //设置application的焦点
    application.focusManager.setFocus(input);
   }
  ]]>
</mx:Script>
<mx:TextArea id=”output” x=”0″ y=”0″ width=”462″ height=”300″ editable=”false”/>
<mx:TextArea id=”input” x=”0″ y=”308″ width=”406″ height=”48″/>
<mx:Button id=”sendBtn” label=”发送” width=”48″ x=”414″ y=”308″ height=”48″/>
</mx:Application>

messaging-config.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<service id=”message-service” >

    <adapters>
        <adapter-definition id=”actionscript” default=”true” />
        <!– <adapter-definition id=”jms”/> –>
    </adapters>

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

<destination id=”chatRoom”>
     <properties>
   <network>
    <subscription-timeout-minutes>0</subscription-timeout-minutes>
   </network>
   <server>
    <message-time-to-live>0</message-time-to-live>
    <allow-subtopics>true</allow-subtopics>
    <subtopic-separator>.</subtopic-separator>
   </server>
  </properties>
  <channels>
   <channel ref=”my-amf”/>
  </channels>
    </destination>
</service>
分享到:
评论

相关推荐

    ProducerConsumer-CSharp:C# 制作的 ProducerConsumer Demo

    项目 "ProducerConsumer-CSharp" 可能包含了这些组件的实例,展示了如何在 C# 中构建一个功能完备的生产者-消费者系统。通过研究这个项目,你可以了解到如何在实际代码中应用这些并发和线程控制机制,以及如何优化多...

    producer-consumer问题的分析和讨论

    在这里,`Main`类会初始化`EventStorage`实例,并将其传递给生产者和消费者,使得它们可以共享这个队列。 3. `Producer.java`: 这个文件可能包含了生产者线程的实现。生产者线程会不断地生成数据(在这种情况下可能...

    eureka-producer-consumer.zip

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

    eureka-producer-consumer.rar

    服务提供者需要配置服务实例的ID和服务组名,而服务消费者则需要配置服务的名称,用于从Eureka Server查找服务实例。 7. **Ribbon与Feign的使用** 在Spring Cloud中,Eureka通常与Ribbon或Feign结合使用,实现服务...

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

    1. **生产者(Producer)**: 生产者是向 Kafka 集群发布消息的应用程序。在 Spring Boot 中,可以通过 `KafkaTemplate` 或自定义配置来发送消息。 2. **消费者(Consumer)**: 消费者从 Kafka 集群中读取消息并处理...

    Peterson_producer_consumer.zip_c语言Peterson

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

    spring-kafka-producer-consumer-example_java_springboot_kafka_

    标题中的“spring-kafka-producer-consumer-example”表明这是一个关于Spring Boot应用,它使用了Apache Kafka作为消息中间件,展示了生产者(producer)和消费者(consumer)的实现。描述中的“Simple application ...

    ProducerConsumer

    "ProducerConsumer"是一个基于Java和SpringBoot框架的生产者/消费者问题的应用实例。生产者/消费者问题是多线程编程中的经典问题,它涉及到如何在多个线程之间共享资源,以避免数据竞争和提高效率。在这个示例中,...

    kafka-producer-consumer

    这个名为"Kafka-producer-consumer"的项目显然关注的是Kafka中的生产者(Producer)和消费者(Consumer)组件,这两部分是Kafka生态系统中的核心元素。在这里,我们将深入探讨Kafka的生产者与消费者模型,以及如何...

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

    1. **创建BlockingQueue实例**:选择合适的`BlockingQueue`实现,如`ArrayBlockingQueue`,设定其容量。例如: ```java BlockingQueue&lt;Integer&gt; queue = new ArrayBlockingQueue(10); ``` 2. **定义生产者类...

    阿里云消息队列MQ

    7. **Producer实例和Consumer实例**:每个Producer或Consumer可以有多个实例,它们可以在不同的进程或机器上运行。Producer实例和Consumer实例都是线程安全的,可以跨线程共享。 消息队列MQ提供了两种消费模式: -...

    Producer产生一个数字而Consumer消费这个数字.rar_java 多线程_producer.java_生产者消费者_

    `Producer产生一个数字而Consumer消费这个数字.doc`文件可能是对这个示例的详细文档,包括代码解释和运行结果。而`www.pudn.com.txt`可能包含了获取或参考此示例的来源信息。 在实际应用中,生产者消费者模式广泛...

    RoketMQ高可用、高性能架构底层原理解析

    广播消费模式下,相同 Consumer Group 的每个 Consumer 实例都接收全量的消息。 普通顺序消息(Normal Ordered Message) 普通顺序消息是指消费者通过同一个消费队列收到的消息是有顺序的,不同消息队列收到的消息...

    rocketmq实例代码

    - **Consumer.java**: 实现消息消费者,创建一个Consumer实例,设置NameServer地址,订阅主题,并注册回调函数处理接收到的消息。 ```java DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(...

    JMS完全实例(八个实例)

    在这些实例中,我们将看到如何使用生产者(Producer)创建消息并发送到队列(Queue)或主题(Topic)。消费者(Consumer)则从这些队列或主题中接收消息。理解如何创建消息对象,设置其属性,并通过Session和...

    Python测试Kafka集群(pykafka)实例

    consumer = topic.get_simple_consumer(consumer_group='test', auto_commit_enable=True, auto_commit_interval_ms=1, consumer_id='test') ``` `auto_commit_enable=True`意味着消费者会定期提交已读取的消息,...

    C#kafka开发实例

    要创建一个C# Kafka生产者,你需要初始化一个ProducerConfig对象,并使用其创建一个Producer实例。设置必要的配置,如BootstrapServers(Kafka集群的地址),然后使用ProduceAsync方法将消息发送到特定的主题。例如...

    eureka双节点实例

    在Eureka双节点实例中,可能还会包含服务提供者(Producer)和服务消费者(Consumer)的示例代码。服务提供者会实现业务逻辑,并注册到Eureka Server;服务消费者则会通过Eureka Server找到服务提供者,进行远程调用...

    kafka学习实例

    这通常涉及创建Producer实例,设置配置,然后调用send方法发送消息。 3. **消费者API**:消费者从Kafka的主题中读取数据。Kafka支持两种消费者模式:旧版的Simple Consumer和新版的Consumer Group。Consumer Group...

    kafka demo ,两种线程消费方式

    Kafka是一个发布/订阅模型的消息队列,它包含生产者(Producer)、消费者(Consumer)和主题(Topic)。生产者负责发布消息到主题,而消费者则订阅这些主题并消费消息。消费者通过消费者组(Consumer Group)进行...

Global site tag (gtag.js) - Google Analytics