`
7wolfs
  • 浏览: 182686 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ActiveMQ问题解决记录

 
阅读更多
问题4:Networks of Brokers
在每个activemq server的配置文件activemq.xml里加入如下内容,每个activemq server都需要设置内容相类型的multicase,如果activemq的连接设置了安全权限,则需要在networkConnector元素中加入userName password内容。
<transportConnectors>
       <transportConnector name="openfire" uri="tcp://localhost:61617" discoveryUri="multicast://openfire"/> 
    </transportConnectors>
    
    <networkConnectors>
      <!-- by default just auto discover the other brokers -->
      <networkConnector name="openfire" uri="multicast://openfire" userName="publisher" password="password" /> 
    </networkConnectors>


问题3:使用http协议
activeMQ的运行版本是4.0,调用activeMQ的jar包进行收发消息时,需要将activeMQ server目录里的commons-httpclient-2.0.1.jar、xstream-1.1.2.jar、xmlpull-1.1.3.4d_b4_min.jar拷贝到activeMQ jar使用者的classpath环境里。


问题2:Java与C#通过ActiveMQ进行消息交互
情景1:Java发送消息,C#接收消息; 情景2:C#发送消息,Java接收消息。

写C#的AMQ客户端时,需要引用到Apache.NMS-1.1.0-bin和Apache.NMS.ActiveMQ-1.1.0-bin这两个文件包中的dll文件(下载地址:http://archive.apache.org/dist/activemq/apache-nms/1.1.0/);将Apache.NMS.ActiveMQ-1.1.0-bin中的nmsprovider-activemq.config和nmsprovider-tcp.config这两个配置文件放入C#的AMQ客户端可执行路径中,使客户端可以找到AMQ这两个相关的配置信息文件。

Apache.NMS-1.1.0要求的org.apache.activemq.openwire.v*.MarshallerFactory版本是v2,该版本在incubator-activemq-4.0不存在,无法与他进行消息交互;在apache-activemq-4.1.2中存在,可以进行消息交互。

出现过的问题:
1)No IConnectionFactory implementation found for connection URI
未将nmsprovider-activemq.config和nmsprovider-tcp.config这两个配置文件放入C#的AMQ客户端可执行路径中。

2)java.lang.IllegalArgumentException: Invalid version: 6, could not load org.apache.activemq.openwire.v6.MarshallerFactory
Apache.NMS-1.1.0要求的org.apache.activemq.openwire.v*.MarshallerFactory版本与incubator-activemq-4.0中的该类的v*包版本不一致。

C#的AMQ客户端代码,参见附件:AMQ Client For C sharp.zip

问题1:topic receive: The subscription does not exist (activemq 4.0)
问题原因:同一个consumer的selector发生了变化,参见下面方法中的第84行至第95行。
org.apache.activemq.broker.region.TopicRegion.addConsumer(ConnectionContext context, ConsumerInfo info)

解决方案:在 AbstractRegion.removeConsumer 方法中增加null保护处理。
void org.apache.activemq.broker.region.AbstractRegion.removeConsumer(ConnectionContext context, ConsumerInfo info) throws Exception

public void removeConsumer(ConnectionContext context, ConsumerInfo info) throws Exception {
        
        Subscription sub = (Subscription) subscriptions.remove(info.getConsumerId());
//        if( sub==null )
//            throw new IllegalArgumentException("The subscription does not exist: "+info.getConsumerId());
        if (sub != null) {
	        // remove the subscription from all the matching queues.
	        for (Iterator iter = destinationMap.get(info.getDestination()).iterator(); iter.hasNext();) {
	            Destination dest = (Destination) iter.next();
	            dest.removeSubscription(context, sub);
	        }
	        
	        destroySubscription(sub);
        }
    }


topic subscriber的不同selector会影响到TopicViewMBean.getConsumerCount()的计数个数,具有不同selector的topic subscriber被认为是不同的consumer

原始错误信息(来自于activemq的输出信息):
INFO  Service                        - Sync error occurred: java.lang.IllegalArg
umentException: The subscription does not exist: OFFLINE:1:2
java.lang.IllegalArgumentException: The subscription does not exist: OFFLINE:1:2

        at org.apache.activemq.broker.region.AbstractRegion.removeConsumer(AbstractRegion.java:202)
        at org.apache.activemq.broker.region.TopicRegion.addConsumer(TopicRegion.java:92)
        at org.apache.activemq.broker.region.RegionBroker.addConsumer(RegionBroker.java:296)
        at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:73)
        at org.apache.activemq.advisory.AdvisoryBroker.addConsumer(AdvisoryBroker.java:77)
        at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:73)
        at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:73)
        
       ......
        
分享到:
评论

相关推荐

    ActiveMq总结.docx

    特别是在高并发、分布式环境中,ActiveMQ能够帮助解决诸如系统解耦、最终一致性等问题,为构建复杂的企业级应用提供强有力的支持。同时,与Spring框架的良好集成进一步简化了ActiveMQ的使用,使得开发者能够更加专注...

    activemq5配置文档

    - **日志配置**:日志记录可以帮助排查问题,可以定制日志级别和输出格式。 7. **高可用与集群**: - **镜像队列**:通过镜像队列,可以确保消息在多个Broker间复制,提高可用性。 - **集群部署**:通过集群,...

    ActiveMQ.rar

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它遵循Java Message Service (JMS) 规范,提供高效、可靠的异步通信解决方案。标题中的"ActiveMQ.rar"表明这是一个关于ActiveMQ的压缩包文件,可能包含了该中间件的...

    activeMQ 例子 真实环境下测试过

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息传递协议...通过学习和实践提供的例子,开发者能够更好地掌握如何在实际项目中利用ActiveMQ来解决异步通信、解耦组件、实现可靠的数据交换等问题。

    activemq-5.10.0

    - 日志记录:ActiveMQ的日志可以帮助诊断问题,可以通过调整日志级别获取更多调试信息。 - JMX工具:利用JMX(Java Management Extensions)可以远程管理和监控ActiveMQ实例。 总结,Apache ActiveMQ 5.10.0是一...

    【BAT必备】activeMQ面试题

    - **监控与日志**: 配置监控工具和日志记录,及时发现并解决潜在问题。 - **安全策略**: 实施适当的安全措施,如认证、加密等,保护消息传输的安全性。 #### 四、ActiveMQ进阶技术 **4.1 ActiveMQ如何实现消息的...

    基于Springboot+ActiveMQ事务==本地事件表+activemq.zip

    本项目基于Springboot和ActiveMQ实现了一种分布式事务解决方案,它利用了“本地事件表”和ActiveMQ来协调跨服务的数据操作。接下来,我们将深入探讨这个方案的各个组成部分以及它们如何协同工作。 首先,Springboot...

    activeMQ在文件上传的应用

    即使文件上传过程中出现错误,由于消息的持久化特性,可以确保消息不会丢失,待问题解决后重新尝试上传。 6. **负载均衡与扩展**:随着系统规模的扩大,可能需要增加ActiveMQ实例来分担负载。ActiveMQ支持集群部署...

    activeMQ学习资料

    - **问题排查**:文档可能提供常见问题及解决方法,帮助开发者快速解决问题。 5. **ActiveMQ技术总结文档** - **高级特性**:介绍如虚拟主题、网络连接、消息筛选等高级特性及其用法。 - **性能优化**:探讨如何...

    ActiveMQ安装包及学习资料.相当经典

    通过这些资源,你可以了解如何创建生产者和消费者、如何配置和优化ActiveMQ,以及如何解决常见问题。同时,动手实践是提升技能的关键,尝试搭建一个简单的ActiveMQ环境,并编写一些示例应用来发送和接收消息。 总之...

    apache-activemq-5.12.0.zip

    10. **社区支持**:作为Apache软件基金会的项目,ActiveMQ拥有活跃的社区,提供了丰富的文档、示例和问题解答,方便用户学习和解决问题。 总的来说,"apache-activemq-5.12.0.zip"提供了全面的功能和强大的消息处理...

    activeMQ 示例

    7. **监控与日志**:学习使用ActiveMQ的监控工具和日志记录,以便于诊断和解决问题。 8. **高级特性**:如消息优先级、分页、虚拟主题(Virtual Topics)、网络代理(Network of Brokers)等。 通过以上内容,...

    apache-activemq-4.1.2

    - **Apache ActiveMQ社区**:Apache社区提供了丰富的文档和讨论资源,帮助用户解决问题和学习新技术。 - **API文档**:ActiveMQ的API文档详细解释了如何使用其提供的类和方法,便于开发人员集成和扩展。 综上所述...

    apache-activemq-5.6.0-bin

    总之,Apache ActiveMQ作为一款强大的消息中间件,为开发者提供了灵活、高性能的解决方案,以实现分布式系统间的异步通信,提升应用程序的可伸缩性和可靠性。5.6.0版本虽然已有些许年代,但它仍然代表了ActiveMQ成熟...

    apache-activemq-5.14.1资源下载

    9. **插件系统**: ActiveMQ 具有强大的插件系统,开发者可以根据需求定制功能,例如添加新的协议支持、日志记录或者监控工具。 10. **嵌入式使用**: ActiveMQ 可以作为应用程序的一部分被嵌入,这样可以减少网络...

    apache-activemq-5.13.2.rar

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它基于Java Message Service (JMS) 规范,提供高效、可靠的异步通信解决方案。ActiveMQ 5.13.2是该软件的一个版本,此版本可能包含了对之前版本的改进、修复和新...

    apache-activemq-5.15.2-bin.zip

    综上所述,“apache-activemq-5.15.2-bin.zip”压缩包包含了一整套在Windows上运行Apache ActiveMQ所需的组件和服务,为企业级应用提供了强大的消息传递解决方案。用户不仅可以利用其进行异步处理,还可以构建分布式...

    apache-activemq-5.10.0.rar

    - **更好的监控**:可能改进了监控和日志记录,使用户更容易诊断和解决问题。 - **兼容性改进**:可能提升了与其他软件(如Java版本、操作系统等)的兼容性。 **使用ActiveMQ的场景:** 1. **微服务架构**:在...

    activemq-rar-5.2.0.rar

    5. **log4j-1.2.14.jar**:这是一个广泛使用的日志记录框架,用于记录ActiveMQ运行时的调试和诊断信息。 6. **backport-util-concurrent-2.1.jar**:这是一个Java并发工具包的回移植,为不支持Java 5及以上版本的...

Global site tag (gtag.js) - Google Analytics