我想知道什么是JMS协议?它是像http或二进制的文本基础协议?这些协议的层次结构是什么?(RMI> JMS或......)
如果您向我介绍学习这些协议层次结构的好参考,我将感谢您.
RGDS
在当前项目中,我们一直使用jms将xml作为textmessage发送.我不明白为什么他们不是简单地发送Objectmessage,为什么有处理xml的开销?
所以问题基本归结为为什么在jms中使用xml?
我有代码片段通过Spring JMSTemplate发送jms消息.为了测试方法我使用Mockito.
我的代码如下所示.... publishDialogueServiceMessage() - >
brokerUrl = jmsQueueProperties.getProperty(MessageRouterConstants.JMS_QUEUE_URL);
LOG.info("The broker url is : {}", brokerUrl);
jmsTemplate.send(jmsQueueProperties.getProperty(MessageRouterConstants.QUEUE), new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
ObjectMessage obj = session.createObjectMessage(serviceResponse);
messageSent = true;
return obj;
}
});
Run Code Online (Sandbox Code Playgroud)
在上面的代码我设置布尔变量true,检查是否发送了消息
我的测试看起来如下,
@Before
public void setUp() throws Exception {
connectionFactory = Mockito.spy(new ActiveMQConnectionFactory(
"vm://localhost?broker.persistent=false"));
conn = connectionFactory.createConnection();
conn.start();
}
@After
public void cleanUp() throws Exception{
conn.stop();
}
Run Code Online (Sandbox Code Playgroud)
@Test
public void testPublishDialogueServiceMessage()
{
ServiceResponse response = Mockito.mock(
ServiceResponse.class, Mockito.withSettings()
.serializable());
JmsTemplate mockTemplate …Run Code Online (Sandbox Code Playgroud) 这是我的客户端代码:
\n\n公共类 ABCServlet 扩展 HttpServlet {
\n\nprotected void doGet(HttpServletRequest request,\n HttpServletResponse response){\n//do blah blah\nString msg = null;\n\njava.io.OutputStream os = response.getOutputStream();\njava.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(os);\noos.writeObject(msg);\nmsg = null;\noos.flush();\noos.close();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道如何使用上面的代码我的监听器被启动 -
\n\npublic class ABCListener implements MessageListener {\n\n@Override\npublic void onMessage(Message arg0) {\n AbstractJDBCFacade fa\xc3\xa7ade = null;\n try{\n fa\xc3\xa7ade = something;\n throw new UserException();\n }catch(UserException ex){\n log.error("ABC Exception " + ex);\n }\nRun Code Online (Sandbox Code Playgroud)\n\n配置 :
\n\n<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">....\n\n<bean id="jmsQueue" class="org.springframework.jndi.JndiObjectFactoryBean">\n\n<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102">\nRun Code Online (Sandbox Code Playgroud)\n\n我有 3 个问题:\n1. 如果不显式地将其放入队列,如何调用侦听器?\n2. 当 onMessage 方法抛出 …
我使用Tibjms jar 进行 JMS 连接,在正常情况下工作正常,但如果与 jms 提供程序的连接丢失然后又恢复,我就会遇到问题。为了重现该问题,我执行了以下步骤 -
连接内网并启动服务器。工作正常。
断开与内联网的连接。它开始尝试重新连接服务器。美好的。
再次连接内网。它抛出未知异常并且再也不会连接。问题。
所以,我的问题是“javax.jms.JMSException:服务器未知的连接”,它并没有告诉我太多信息,您可以在日志末尾看到它。
您可以从以下日志中看到它 -
2017-10-13 15:40:52,333 [ http-nio-8080-exec-2] INFO org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 37 ms
2017-10-13 15:41:29,293 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Disconnected from ssl://10.10.10.10:5071, will attempt to reconnect
at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1912)
at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:42:29,334 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://11.11.11.11:5071, attempt 1 out …Run Code Online (Sandbox Code Playgroud) 我有一个连接到MQ的Java客户端,队列管理器抱怨The maximum number of instances, 50, of channel 'CHAN' was reached。
在哪里以及如何在客户端代码或属性中找到由Java客户端创建的实例数?
我正在为 JmsFactory 配置并发性以便使用我的队列。
我这样做了:
@Bean(name = "myFactory")
public DefaultJmsListenerContainerFactory sqsFactory(SQSConnectionFactory connectionFactory,
CustomJmsListenerConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setConcurrency("1-3");
return factory;
}
Run Code Online (Sandbox Code Playgroud)
我看到DefaultJmsListenerContainerFactory.setConcurrency后面调用了DefaultMessageListenerContainer。
我在我的应用程序中配置了 2 个队列,我正在使用 spring boot:
@JmsListener(destination = "queue1", containerFactory = "myFactory")
@JmsListener(destination = "queue2", containerFactory = "myFactory")
Run Code Online (Sandbox Code Playgroud)
我正在阅读 spring 文档并遇到一些方法,现在我有一些疑问。
1 - 有什么区别:
setConcurrency(String concurrency)
setConcurrentConsumers(int concurrentConsumers)
Run Code Online (Sandbox Code Playgroud)
即使阅读文档,我也不理解其中的区别以及此配置如何改变应用程序行为。我认为 setConcurrency 应该是每个 @jmsLister 用于从队列获取消息的线程数...您能解释一下我有 100 条消息排队(每个配置队列)的配置映像示例吗?
2 - setMaxMessagesPerTask(int maxMessagesPerTask)
如果队列中有 100 条消息,并发数 = 3,并且该数字为 10(默认),那么行为是什么?
从 SpringBoot v.2.5.5 更新到 v3.1.0 后,还需要ConnectionFactory从更新javax.jms.ConnectionFactory到jakarta.jms.ConnectionFactory。我没有改变任何其他东西。不幸的是现在我收到这样的错误:
ERROR - Could not refresh JMS Connection for destination 'tServerEvent' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: no further information
我调查了它并与旧的进行了比较javax.ConnectionFactory,似乎brokerUrl它们的默认值是不同的
因为javax.jms.ConnectionFactory它是:vm://localhost?broker.persistent=false
因为jakarta.jms.ConnectionFactory它是:tcp://localhost:61616
即使我手动设置经纪人网址,如下所示:
spring:
activemq:
broker-url: vm://localhost?broker.persistent=false
Run Code Online (Sandbox Code Playgroud)
它仍然无法工作,错误是: Cause: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [vm]
我不知道为什么 jakarta.ConnectionFactory 和旧 javax.ConnectionFactory 的默认brokerUrl 不同,也不知道如何成功运行我的应用程序。如果您能给我一些提示,我将不胜感激。 …
jms ×8
java ×5
spring ×2
spring-jms ×2
ibm-mq ×1
junit ×1
mockito ×1
protocols ×1
spring-boot ×1
tibco ×1
tibco-ems ×1
unit-testing ×1
xml ×1