我已经在集群部署中测试了 WSO2 MB 2.2.0,其中 WS 订阅了一个主题。我已经复制了项目文档中描述的设置。
当集群中的第一个节点启动时,它会按预期获得持久订阅队列。但是,第二个和后面的节点也尝试获得持久连接,并且代理拒绝访问并引发异常。这是代理部分的预期行为,但其余节点的主题管理部分崩溃,因此集群的其余成员无法启动到可用状态。
这是一个已知问题,集群的预期行为吗?是不是意味着 CarbonEventBroker 组件不适合集群环境?
这是启动 IService 组件时引发的异常的日志(我猜):
TID:[0] [MB] [2015-11-16 13:11:36,670] 错误 {org.wso2.carbon.event.core.internal.builder.EventBrokerHandler} - 无法创建事件代理 {org.wso2. carbon.event.core.internal.builder.EventBrokerHandler} org.wso2.carbon.event.core.exception.EventBrokerConfigurationException:无法获取订阅 在 org.wso2.carbon.event.core.internal.CarbonEventBroker.loadExistingSubscriptions(CarbonEventBroker.java:83) 在 org.wso2.carbon.event.core.internal.CarbonEventBroker.init(CarbonEventBroker.java:67) 在 org.wso2.carbon.event.core.internal.CarbonEventBrokerFactory.getEventBroker(CarbonEventBrokerFactory.java:90) 在 org.wso2.carbon.event.core.internal.builder.EventBrokerBuilder.createEventBroker(EventBrokerBuilder.java:56) 在 org.wso2.carbon.event.core.internal.builder.EventBrokerHandler.startEventBroker(EventBrokerHandler.java:57) 在 org.wso2.carbon.event.core.internal.builder.EventBrokerHandler.notifyStart(EventBrokerHandler.java:96) 在 org.wso2.carbon.andes.internal.QpidServiceComponent.activate(QpidServiceComponent.java:258) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:260) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:347) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197) 在 org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343) 在 org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222) 在 org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451) 在 org.wso2.carbon.event.core.internal.builder.EventBrokerBuilderDS.activate(EventBrokerBuilderDS.java:69) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:260) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:347) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197) 在 org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343) 在 org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222) 在 org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451) 在 org.wso2.carbon.core.init.CarbonServerManager.initializeCarbon(CarbonServerManager.java:517) 在 org.wso2.carbon.core.init.CarbonServerManager.start(CarbonServerManager.java:219) 在 org.wso2.carbon.core.internal.CarbonCoreServiceComponent.activate(CarbonCoreServiceComponent.java:77) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:260) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:347) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197) 在 org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343) 在 org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222) 在 org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) 在 org.eclipse.equinox.http.servlet.internal.Activator.registerHttpService(Activator.java:81) 在 org.eclipse.equinox.http.servlet.internal.Activator.addProxyServlet(Activator.java:60) 在 org.eclipse.equinox.http.servlet.internal.ProxyServlet.init(ProxyServlet.java:40) 在 org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.init(DelegationServlet.java:38) 在 org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1267) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1186) 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1081) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5027) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745) 引起:org.wso2.carbon.event.core.exception.EventBrokerException:无法订阅主题/msg/EVT-01 注册消费者时出错:org.wso2.andes.AMQSecurityException:无法订阅队列碳:bc4688e3fb936491cf1f524905ffbd9ef816e80bea175512 因为它已经有一个现有的独占消费者 [错误代码 403:访问被拒绝] 在 org.wso2.carbon.event.core.internal.delivery.jms.JMSDeliveryManager.subscribe(JMSDeliveryManager.java:136) 在 org.wso2.carbon.event.core.internal.CarbonEventBroker.loadExistingSubscriptions(CarbonEventBroker.java:79) ... 88 更多 原因:javax.jms.JMSException:注册消费者时出错:org.wso2.andes.AMQSecurityException:无法订阅队列 carbon:bc4688e3fb936491cf1f524905ffbd9ef816e80bea175512,因为它已经有一个现有的独占消费者 [错误代码 403:拒绝访问] 在 org.wso2.andes.client.AMQSession$5.execute(AMQSession.java:2084) 在 org.wso2.andes.client.AMQSession$5.execute(AMQSession.java:2027) 在 org.wso2.andes.client.AMQConnectionDelegate_8_0.executeRetrySupport(AMQConnectionDelegate_8_0.java:315) 在 org.wso2.andes.client.AMQConnection.executeRetrySupport(AMQConnection.java:621) 在 org.wso2.andes.client.failover.FailoverRetrySupport.execute(FailoverRetrySupport.java:102) 在 org.wso2.andes.client.AMQSession.createConsumerImpl(AMQSession.java:2025) 在 org.wso2.andes.client.AMQSession.createConsumer(AMQSession.java:1028) 在 org.wso2.andes.client.AMQSession.createDurableSubscriber(AMQSession.java:1177) 在 org.wso2.andes.client.AMQSession.createDurableSubscriber(AMQSession.java:1077) 在 org.wso2.andes.client.AMQTopicSessionAdaptor.createDurableSubscriber(AMQTopicSessionAdaptor.java:73) 在 org.wso2.carbon.event.core.internal.delivery.jms.JMSDeliveryManager.subscribe(JMSDeliveryManager.java:130) ... 89 更多 引起:org.wso2.andes.AMQSecurityException:无法订阅队列 carbon:bc4688e3fb936491cf1f524905ffbd9ef816e80bea175512 因为它已经有一个现有的独占消费者 [错误代码 403:访问被拒绝] 在 org.wso2.andes.client.handler.ConnectionCloseMethodHandler.methodReceived(ConnectionCloseMethodHandler.java:85) 在 org.wso2.andes.client.handler.ClientMethodDispatcherImpl.dispatchConnectionClose(ClientMethodDispatcherImpl.java:192) 在 org.wso2.andes.framing.amqp_0_91.ConnectionCloseBodyImpl.execute(ConnectionCloseBodyImpl.java:140) 在 org.wso2.andes.client.state.AMQStateManager.methodReceived(AMQStateManager.java:111) 在 org.wso2.andes.client.protocol.AMQProtocolHandler.methodBodyReceived(AMQProtocolHandler.java:515) 在 org.wso2.andes.client.protocol.AMQProtocolSession.methodFrameReceived(AMQProtocolSession.java:461) 在 org.wso2.andes.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:96) 在 org.wso2.andes.client.protocol.AMQProtocolHandler$2.run(AMQProtocolHandler.java:466) 在 org.wso2.andes.pool.Job.processAll(Job.java:109) 在 org.wso2.andes.pool.Job.run(Job.java:157) ... 3 更多 TID:[0] [MB] [2015-11-16 13:11:36,671] 错误 {org.wso2.andes.client.AMQConnection} - Throwable 已接收但未设置侦听器:org.wso2.andes.AMQException:无法订阅排队 carbon:bc4688e3fb936491cf1f524905ffbd9ef816e80bea175512 因为它已经有一个现有的独占消费者 [错误代码 403: 拒绝访问] {org.wso2.andes.client.AMQConnection}