0 0

ActiveMQ 使用 Stomp 协议实现发布/订阅模式的问题10

我使用 php 做发布者, java 做订阅者。代码如下:
  • php
  • <?php
    
    require_once("Stomp.php");
    $con = new Stomp("tcp://localhost:61613");
    $con->connect();
    $con->begin("StompTransaction");
    
    $msg = "test".time();
    $con->send("StompTopic", $msg);
    
    $con->commit("StompTransaction");
    $con->disconnect();
    
    echo "Sent message with body '".$msg."'\n";
    ?>
    

  • java
  • public class StompSub {
    
    	final static String tx = "StompTransaction";
    	final static String topic = "StompTopic";
    	
    	public static void main(String args[]) throws Exception {
    		StompConnection connection = new StompConnection();
    		connection.open("localhost", 61613);
    		connection.connect("system", "manager");
    		
    		// add a consumer
    		connection.subscribe(topic);
    		
    		for (int i = 0; i < Long.MAX_VALUE; i++) {
    			try {
    				connection.begin(tx);
    				StompFrame message = connection.receive(60*1000);//60 秒钟timeout
    				System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + " get -> " + message.getBody());
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			} finally {
    				connection.commit(tx);
    			}
    			 
    			Thread.sleep(500);
    		}
    		
    		connection.disconnect();
    	}
    
    }
    


    然后我先启动了两个 java 订阅者实例,等待消息的发布。

    接着,我执行了一次php的脚本,这时候问题来了:

    只有其中一个java实例收到了消息,另外一个没有收到。

    按照 发布/订阅 模式的要求,应该是所有订阅者都能收到消息的呀?怎么这里好像变成 点对点 的模式了,一个消息只能被一个消费者消费。这让我好奇怪啊。

    我试了下用Java + 普通的tcp连接来做发布订阅,却发现没问题。

    因此我在怀疑是不是 ActiveMQ 对 Stomp 协议实现的不完善啊?还是我理解错了呢?

    恳请各位帮我分析一下,在此先谢谢各位啦。
    2012年8月16日 18:15
    目前还没有答案

    相关推荐

      用C#实现的ActiveMQ发布/订阅消息传送

      在本场景中,我们关注的是如何使用C#编程语言结合ActiveMQ来实现发布/订阅模式的消息传送。ActiveMQ是Apache软件基金会开发的一个开源消息传递平台,支持多种协议,包括NMS(.NET Messaging Service),它是专门为...

      Apache ActiveMQ学习笔记【原创:mq的方式有两种:点到点和发布/订阅】

      ActiveMQ 的主要特性包括支持多种协议(如 OpenWire、AMQP、STOMP、MQTT、REST),持久性消息存储机制,以及高可用性和负载均衡能力等。 ##### 1.2 下载与安装 根据提供的部分文件内容,我们可以了解到 ActiveMQ ...

      ActiveMq发布和订阅消息的实现源码

      首先,我们需要理解ActiveMQ中的发布/订阅模式。在这个模型中,生产者(Publisher)发送消息到一个主题(Topic),而多个消费者(Subscriber)可以订阅该主题来接收这些消息。每个订阅者可以独立接收到所有发布的...

      Spring整合ActiveMQ实现队列和主题发布订阅通信

      Spring框架作为Java企业级应用的事实标准,提供了与ActiveMQ集成的便利,使得开发者可以轻松地在Spring应用中实现消息队列和发布/订阅模式的通信。 本DEMO将展示如何通过Spring整合ActiveMQ来实现队列(Queue)和...

      jms-test.zip_jms activemq_jms test

      标题中的“jms-test.zip_jms activemq_jms test”揭示了这...综上所述,这个压缩包文件包含了使用JMS和ActiveMQ在Tomcat环境中实现发布/订阅模式的消息传递的示例代码和测试用例,是学习和实践JMS技术的一个宝贵资源。

      SpringMvc+redis+activeMq实现消息发布订阅(测试通过)

      在发布订阅模式下,生产者发布消息到主题,而订阅者可以接收到这些消息。 实现SpringMvc、Redis和ActiveMQ的消息发布订阅,首先需要在项目中引入相应的依赖。对于SpringMvc,通常需要添加Spring Web和Spring ...

      ActiveMQ 教学视频/教程 /附带笔记等资源

      - **主题(Topic)**:与队列不同,主题支持发布/订阅模式,多个订阅者可以同时接收到同一消息。 - **持久化(Persistence)**:ActiveMQ支持消息持久化,即使在服务器重启后也能确保消息不会丢失。 - **事务...

      ActiveMQ_Helloword

      在 ActiveMQ 中,使用主题(Topic)来实现发布/订阅模式。生产者发布消息到特定主题,而消费者则通过订阅该主题来接收消息。如果多个消费者订阅同一主题,消息会被广播到所有订阅者。 **Apache ActiveMQ 和 JAR ...

      Group_chat_stomp:使用脚踩协议进行群聊,发布订阅一对多协议

      Group_chat_stomp 使用stomp协议进行群组聊天,发布/订阅一对多模式这是梅西大学159339 Internet编程作业。 该项目的目的是编写一个与ActiveMQ MOM交互以实现微博客/群组聊天的客户端程序,仅使用HTML和JavaScript,...

      SpringBoot整合ActiveMQ+websocket.docx

      客户端通过WebSocket连接到服务器,然后通过STOMP协议与ActiveMQ通信,订阅和发布消息。 以上就是Spring Boot整合ActiveMQ和WebSocket的基本概念和关键步骤。通过这样的整合,我们可以构建一个高效的消息传递系统,...

      ActiveMQ使用入门.pdf

      【ActiveMQ使用入门】 ActiveMQ是一款基于Java的消息中间件,它是Apache基金会的开源项目,也是最早的JMS(Java消息服务)...无论是简单的点对点通信还是复杂的发布/订阅模式,ActiveMQ都能提供灵活且高效的解决方案。

      ActiveMQ的处理模式:PTP与PUB/SUB

      ActiveMQ是Apache软件基金会开发的一个开源消息中间件,支持多种消息协议,如AMQP、STOMP、OpenWire等。在ActiveMQ中,有两种主要的消息处理模式:点对点(Point-to-Point,简称PTP)和发布/订阅(Publish/Subscribe...

      ActiveMQ的简单例子

      对于发布/订阅模式,我们需要创建一个`TopicSubscriber`来订阅主题并接收消息。 5. **运行与测试**:在IDEA中运行生产者和消费者,观察消息的传递情况。确保ActiveMQ服务器正常运行,且生产者和消费者配置正确。 6...

      ActiveMQ开发实例-1

      ActiveMQ 是一个开源的消息中间件,由 Apache 软件基金会开发,它遵循开放消息传递协议(Open Message Broker Protocol)标准,支持多种消息协议,如 STOMP、AMQP、MQTT 和 JMS。本实例主要针对 ActiveMQ 的 C++ ...

      ActiveMQ实战资料

      3. **主题与队列的使用**:讲解如何创建、管理和使用主题和队列,包括点对点和发布/订阅模式的实际应用。 4. **高级特性**:如事务处理、消息优先级、死信队列、消息分页等高级功能的使用。 5. **性能调优**:如何...

      ActiveMQ讲义.ppt

      - **多协议支持**:除了JMS,ActiveMQ还支持STOMP、AMQP、MQTT等多种消息协议,便于不同平台和语言的集成。 - **高可用性**:通过网络集群和故障转移,ActiveMQ能确保服务的高可用性和消息的可靠性。 - **性能...

      Delphi ActiveMQ 使用帮助

      - **持久订阅**: 一种可以长期保存订阅状态的机制,适用于发布/订阅模式。 - **虚拟目的地**: 一种特殊的目的地类型,用于模拟多个逻辑目的地。 - **对象消息**: 用于发送序列化的 Java 对象。 #### 十、已知限制 ...

      php实现通过stomp协议连接ActiveMQ操作示例

      8. **订阅模式**:STOMP允许你选择订阅的模式,如`UNSUBSCRIBE`(取消订阅)、`ACK`(确认消息接收)和`NACK`(否定确认)。 9. **ActiveMQ特性**:ActiveMQ提供了丰富的特性,如主题(Topic)、虚拟主题(Virtual ...

      ActiveMQ简单Demo案例

      // 或者使用session.createTopic("MyTopic")创建发布/订阅模式 // 创建消息 TextMessage message = session.createTextMessage("Hello, ActiveMQ!"); // 发送消息 producer.send(message); ``` 对于消费者端,...

      ActiveMQ实例Demo

      总结来说,"ActiveMQ实例Demo"为我们展示了如何利用ActiveMQ构建消息传递系统,无论是点对点还是发布/订阅模式,都可通过简单的Java代码实现。通过学习这个实例,我们可以更好地理解ActiveMQ的工作原理和使用方法,...

    Global site tag (gtag.js) - Google Analytics