`
7wolfs
  • 浏览: 178153 次
  • 性别: 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)
        
       ......
        
分享到:
评论

相关推荐

    java实现的消息中间件之AcitveMQ详解,学习学习

    KahaDB他是默认的持久化策略,所有消息都会顺序添加到一个日志文件中,同时另外有一个索引文件记录指向这些日志的存储地址,还有一个事务日志用于消息回复操作。是一个专门针对消息持久化的解决方案,它对典型的消息...

    simple-camel

    Spring + Apache Camel问题解决方案 目前,有必要实施: 该应用程序使用Apache Camel从文件夹中读取文件。 ++ 根据文件类型执行某些操作: 如果文件具有txt扩展名-&gt;将文件发送到txtQueue嵌入式ActiveMQ代理; ++ ...

    docker_sandbox:使用Docker容器测试存储库

    Docker沙盒(Master) 要运行,您需要一台安装了Docker... 在终端中输入: sudo sugit clone https://github.com/rodboza/docker_sandbox.gitgit checkout mastercd docker_sandbox./main.sh架构设计:变更记录...

    java文集

    Java 6 RowSet 使用完全剖析 结合Spring2.0和ActiveMQ进行异步消息调用 struts+hibernate增删改查(一) AXIS 布署问题 struts+hibernate增删改查(二) MySQL中如何实现Top N及M至N段的记录查询?...

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成.zip

    ActiveMQ队列:提供ActiveMQ队列,处理批量发送大数据量邮件、大数据量日志文件。 工作流:功能包括在线办公、我的任务、审批测试、流程管理、模型管理。 CMS:功能包括内容管理、内容管理、统计分析、栏目设置、首页...

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成

    ActiveMQ队列:提供ActiveMQ队列,处理批量发送大数据量邮件、大数据量日志文件。 工作流:功能包括在线办公、我的任务、审批测试、流程管理、模型管理。 CMS:功能包括内容管理、内容管理、统计分析、栏目设置、首页...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    解决问题能力 经历 技术攻关案例 程序开发案例 程序设计案例 设计 设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒转原则 接口隔离原则 迪米特原则 设计模式 结构模式 适配器模式 桥接模式 ...

    淘宝放单源码Java-test:java高并发处理

    记录行为消息---(技术实现)--&gt;分布式MQ(阿里RocketMQ,Apache ActiveMQ,LinkIn Kafka) | | 消费消息并落地实现--(实现)--&gt;Mysql 成本分析: 运维成本:稳定性,NoSQL ,MQ 开发成本:数据一致性,回滚方案 幂等性...

    JeeSpringCloud后台权限管理系统-其他

    ActiveMQ队列:提供ActiveMQ队列,处理批量发送大数据量邮件、大数据量日志文件。工作流:功能包括在线办公、我的任务、审批测试、流程管理、模型管理。CMS:功能包括内容管理、内容管理、统计分析、栏目设置、首页。...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

    java开源包7

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...

Global site tag (gtag.js) - Google Analytics