- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 spring-boot 应用程序 (1.5.14),应该从由旧版 JBoss EAP 6.4 提供的 HornetQ JMS 主题
我知道自 spring 1.4.8 以来,对 HornetQ 的支持已被弃用。但目前还不可能取代这个遗留系统。
我在 gradle 中的依赖项:
compile("org.springframework.boot:spring-boot-starter-hornetq:1.4.7.RELEASE")
这是我的 TopicListener 类:
@Component
public class LegacyTopicListener {
@JmsListener(destination = "jms/topic/legacyTopic", containerFactory = "myFactory")
public void onReceive(String content) {
System.out.println(content);
}
}
这是我的 JmsConfiguration 类:
@Configuration
@EnableJms
class JmsConfiguration {
@Bean
public DefaultJmsListenerContainerFactory myFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
try {
factory.setConnectionFactory(connectionFactory());
} catch (Exception e) {
e.printStackTrace();
}
return factory;
}
@Bean
public ConnectionFactory connectionFactory() throws Exception {
HornetQConnectionFactory connectionFactory = new HornetQConnectionFactory(false,
transportConfiguration());
UserCredentialsConnectionFactoryAdapter adapter
= new UserCredentialsConnectionFactoryAdapter();
adapter.setUsername("daUser");
adapter.setPassword("daPassword");
adapter.setTargetConnectionFactory(connectionFactory);
return adapter;
}
private TransportConfiguration transportConfiguration() throws Exception {
Map<String, Object> map = new HashMap<>();
String host = InetAddress.getLocalHost().getHostAddress();
map.put("host", host);
map.put("port", "5647");
TransportConfiguration configuration = new TransportConfiguration(
"org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", map);
return configuration;
}
}
当我尝试连接 JMS 主题时,出现此异常:
2019-01-29 17:14:09,975 [ads-1571167970)] ERROR o.h.c.client - HQ214013: Failed to decode packet
java.lang.IllegalArgumentException: HQ119032: Invalid type: 0
at org.hornetq.core.protocol.core.impl.PacketDecoder.decode(PacketDecoder.java:447) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.protocol.ClientPacketDecoder.decode(ClientPacketDecoder.java:56) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:493) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1712) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.remoting.impl.netty.HornetQChannelHandler.channelRead(HornetQChannelHandler.java:73) ~[hornetq-core-client-2.4.7.Final.jar:na]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:153) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) ~[netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:122) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:485) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:452) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:346) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [netty-all-4.0.13.Final.jar:4.0.13.Final]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]
之后 spring-boot 尝试继续并抛出此异常
2019-01-29 17:14:40,009 [ main] INFO o.a.c.h.Http11NioProtocol - Starting ProtocolHandler ["http-nio-10480"]
2019-01-29 17:14:40,012 [ main] INFO o.a.t.u.n.NioSelectorPool - Using a shared selector for servlet write/read
2019-01-29 17:14:40,025 [ main] INFO TomcatEmbeddedServletContainer - Tomcat started on port(s): 10480 (http)
2019-01-29 17:14:40,032 [ main] INFO .s.StatsApplication - Started StatsApplication in 38.181 seconds (JVM running for 38.711)
2019-01-29 17:14:40,423 [on(4)-127.0.0.1] WARN o.s.b.a.h.JmsHealthIndicator - Health check failed
2019-01-29 17:14:40,423 [on(4)-127.0.0.1] WARN o.s.b.a.h.JmsHealthIndicator - Health check failed
javax.jms.JMSException: Failed to create session factory
at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:673) ~[hornetq-jms-client-2.4.7.Final.jar:na]
at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:112) ~[hornetq-jms-client-2.4.7.Final.jar:na]
at org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter.doCreateConnection(UserCredentialsConnectionFactoryAdapter.java:178) ~[spring-jms-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter.createConnection(UserCredentialsConnectionFactoryAdapter.java:152) ~[spring-jms-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.boot.actuate.health.JmsHealthIndicator.doHealthCheck(JmsHealthIndicator.java:38) ~[spring-boot-actuator-1.5.14.RELEASE.jar:1.5.14.RELEASE]
at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:43) ~[spring-boot-actuator-1.5.14.RELEASE.jar:1.5.14.RELEASE]
at org.springframework.boot.actuate.health.CompositeHealthIndicator.health(CompositeHealthIndicator.java:68) [spring-boot-actuator-1.5.14.RELEASE.jar:1.5.14.RELEASE]
at org.springframework.boot.actuate.endpoint.HealthEndpoint.invoke(HealthEndpoint.java:86) [spring-boot-actuator-1.5.14.RELEASE.jar:1.5.14.RELEASE]
at org.springframework.boot.actuate.endpoint.HealthEndpoint.invoke(HealthEndpoint.java:36) [spring-boot-actuator-1.5.14.RELEASE.jar:1.5.14.RELEASE]
at org.springframework.boot.actuate.endpoint.jmx.DataEndpointMBean.getData(DataEndpointMBean.java:46) [spring-boot-actuator-1.5.14.RELEASE.jar:1.5.14.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) [na:1.8.0_144]
at sun.reflect.GeneratedMethodAccessor351.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) [na:1.8.0_144]
at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1252) [na:1.8.0_144]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_144]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [na:1.8.0_144]
at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1246) [na:1.8.0_144]
at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1085) [na:1.8.0_144]
at org.springframework.jmx.export.SpringModelMBean.invoke(SpringModelMBean.java:90) [spring-context-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at javax.management.modelmbean.RequiredModelMBean.getAttribute(RequiredModelMBean.java:1562) [na:1.8.0_144]
at org.springframework.jmx.export.SpringModelMBean.getAttribute(SpringModelMBean.java:109) [spring-context-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:647) [na:1.8.0_144]
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) [na:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) [na:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) [na:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) [na:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) [na:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) [na:1.8.0_144]
at sun.reflect.GeneratedMethodAccessor337.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) [na:1.8.0_144]
at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_144]
at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_144]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_144]
at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) [na:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) [na:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) [na:1.8.0_144]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) [na:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_144]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_144]
Caused by: java.lang.NullPointerException: null
at org.hornetq.core.client.impl.ClientSessionFactoryImpl$PingRunnable.send(ClientSessionFactoryImpl.java:1823) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnection(ClientSessionFactoryImpl.java:1423) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnectionWithRetry(ClientSessionFactoryImpl.java:1121) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.client.impl.ClientSessionFactoryImpl.connect(ClientSessionFactoryImpl.java:266) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:881) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:669) ~[hornetq-jms-client-2.4.7.Final.jar:na]
有人可以帮忙吗?谢谢。
EAP系统通过cli配置:
/subsystem=messaging/hornetq-server=default/jms-topic=legacyTopic:add(entries=["jms/topic/legacyTopic", "java:jboss/exported/jms/topic/legacyTopic"])
JBoss Socket 绑定(bind):(端口偏移为 1200)
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8009"/>
<socket-binding name="http" port="8080"/>
<socket-binding name="https" port="8443"/>
<socket-binding name="jacorb" interface="unsecure" port="3528"/>
<socket-binding name="jacorb-ssl" interface="unsecure" port="3529"/>
<socket-binding name="messaging" port="5445"/>
<socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/>
<socket-binding name="messaging-throughput" port="5455"/>
<socket-binding name="remoting" port="4447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<socket-binding name="jgroups-tcp" port="7600"/>
<socket-binding name="jgroups-tcp-fd" port="57600"/>
</socket-binding-group>
使用端口6645后出错:
Caused by: org.hornetq.api.core.HornetQConnectionTimedOutException: HQ119013: Timed out waiting to receive cluster topology. Group:null
at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:946) ~[hornetq-core-client-2.4.7.Final.jar:na]
at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:669) ~[hornetq-jms-client-2.4.7.Final.jar:na]
... 49 common frames omitted
最佳答案
我已经找到了解决我的问题的方法。但这是一个肮脏的解决方案。
JBoss EAP 6.4.x 使用 HornetQ 2.3.x 版本。 spring-boot 应用程序使用 2.4.x,与 JBoss EAP 6.4.x 中附带的版本相比,这是一个明显更新的 HornetQ 版本
存在版本兼容性问题,不允许 HornetQ 2.3.x 和 2.4.x 互操作,因此会导致错误。
为了解决我的问题,我必须确保我的所有代码(客户端和服务器端)都使用相同的库。
所以我必须更改我的 gradle 依赖项:
compile('org.springframework.boot:spring-boot-starter-hornetq:1.4.7.RELEASE') {
exclude group: "org.hornetq"
}
compile("org.hornetq:hornetq-core-client:2.3.25.SP8-redhat-1")
compile("org.hornetq:hornetq-jms-client:2.3.25.SP8-redhat-1")
之后,spring-boot应用程序就可以与JBoss HornetQ Topic对话了
关于java - 从 spring-boot 应用程序到 JBoss EAP6 HornetQ 主题的 JMS 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425701/
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!