我对JMS连接池和JMS会话池之间感到困惑.
我有一个Java应用程序,它有大约20个线程处理从供应商产品接收的消息.在推送到JMS主题(所有20个线程的相同主题)之前,每个线程都会对消息进行一些处理.
我想确保没有线程等待免费的JMS连接,因为性能至关重要.但是,当我查看JMS连接工厂时,我看不到为JMS连接配置池大小的任何方法.
现在我真的很困惑.是我应该汇集的JMS会议吗?
任何帮助都非常感谢
谢谢乔
编辑:改述问题:
我想使用ActiveMQ作为我的服务器和客户端应用程序之间的信使服务.
我试图在服务器中设置一个嵌入式代理(即不是一个单独的进程)来处理生成的消息供我的客户端使用.此队列是持久的.
经纪人初始化如下:
BrokerService broker = new BrokerService();
KahaPersistenceAdapter adaptor = new KahaPersistenceAdapter();
adaptor.setDirectory(new File("activemq"));
broker.setPersistenceAdapter(adaptor);
broker.setUseJmx(true);
broker.addConnector("tcp://localhost:61616");
broker.start();
Run Code Online (Sandbox Code Playgroud)
经过修修补补后,我最终得到的服务器部分是:
public static class HelloWorldProducer implements Runnable {
public void run() {
try {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost"); // apparently the vm part is all i need
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST.FOO");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
String text = "Hello world! From: " + Thread.currentThread().getName() + " : " …Run Code Online (Sandbox Code Playgroud)
HermesJMS有哪些替代品?我需要针对JBoss WildFly 8进行测试,它使用Java 8. HermesJms似乎是为Java 6构建的,我找不到完整的Java 8端口.我尝试使用此配置选项设置hermes.bat,但是我收到以下错误:
org.xml.sax.SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/secure-processing' is not recognized.
Run Code Online (Sandbox Code Playgroud)
这似乎是由于Xerces JAR版本,但我担心%HERMES_HOME%\ lib\ext下的所有其他库将具有类似的Java 8兼容性问题.最好的方法是使用与Java 8兼容的HermesJMS构建,而不是逐个尝试修复JAR,但这似乎不可能,因为没有这样的分支.
谢谢,
帕迪
我正在使用Spring API JmsTemplate和MappingJackson2MessageConverter(version spring-jms-4.3.4.RELEASE.jar:)将消息发布到ActiveMQ主题,如下面的代码所示.
TopicPublisher类:
@Component
public class TopicPublisher {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private MessageConverter messageConverter;
public void send() {
Product product = new Product();
product.setName("abcd");
product.setPrice(10);
jmsTemplate.setMessageConverter(messageConverter);
jmsTemplate.convertAndSend("product.topic", product);
}
}
Run Code Online (Sandbox Code Playgroud)
MappingJackson2MessageConverter类:
@Configuration
public class JMSTextMessageConverter {
@Bean
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter mappingJackson2MessageConverter
= new MappingJackson2MessageConverter();
mappingJackson2MessageConverter.setTargetType(MessageType.TEXT);
mappingJackson2MessageConverter.setTypeIdPropertyName("_type");
return mappingJackson2MessageConverter;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想为发布到主题的JMS消息设置一些自定义标头.我用谷歌搜索,找不到任何这样做的例子.你能帮我吗 ?
我有一个涉及发送JMS消息的过程.该过程是交易的一部分.如果事务的后续部分失败,发送消息的前一部分之后的部分,我需要取消该消息.有一种想法是以某种方式设置消息,它不会被捡起一段时间,如果我需要回滚,那么我可以去取消消息.不知道消息,我不知道这个想法是否可行.或者,有更好的主意吗?谢谢
我要求设计一个通知/发布,其子系统发送电子邮件的应用程序.我计划使用jms发布/订阅(主题)消息来做到这一点
现在的可见性,将有20到30个订阅者,并且将要发布的消息数量将在每天30000到50000个消息的范围内.
我计划使用ActiveMQ JMS + Spring 3 + Tomcat 6实现 问题
我是JMS的新手,我想知道上面的负载是否很高?
我们真的需要在服务器上部署单独的ActiveMQ,还是我们在Webapp中使用嵌入式ActiveMQ就足够了?
单独的ActiveMQ服务器/嵌入式服务器有哪些优点/缺点?
我在JMS上运行测试用例,发现处理是顺序的.当我向一个使用JMS发送消息的servlet发出200个请求时,接收者(messageListner)正在按顺序恢复请求.如何接收并发请求?我们要设置任何参数吗?我阅读了JMS教程和API,它们在同一个会话中消息是按顺序传递的,即使我正在为每个发送请求创建一个新会话,并且在接收端仍然有10个会话仍处理顺序.
public class ProducerServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
// Defines the JNDI context factory.
public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";
// Defines the JMS context factory.
public final static String JMS_FACTORY = "jms/TestConnectionFactory";
// Defines the queue.
public final static String QUEUE = "jms/TestJMSQueue";
public final static String TOPIC = "jms/TestTopic";
TestJMSListener jms = new TestJMSListener();
ConnectionFactory connectionFactory = null;
Queue dest1 = null;
Topic dest =null;
Connection connection = null;
MessageProducer producer = null;
protected void doGet(HttpServletRequest …Run Code Online (Sandbox Code Playgroud) 什么是JMSType用于?它可以用于定义消息有效负载吗?例如,有效负载可能用于添加产品,JMSType可能是AddProduct.
我在使用Apache CAMEL实现Websphere MQ(WMQ)连接器时遇到了很多困难,该连接器可以无异常地处理MQ确认传递(CoD)报告,也不会以不需要的响应数据报的形式出现副作用.最后,我按照我想要的方式工作,如果您习惯于编写本机MQ客户端,那么这是一种非常标准和通用的方式.我在同一主题的帖子中记录了该方法,但我发现解决方案臃肿而复杂,并且非常感谢任何建议或示例,以使实现更清晰,更优雅.
我理解这个问题的根源在于MQ设计请求 - 回复消息交换模式(MEP)的方式,而不是JMS规范的方式,而不是其JMS组件中的请求 - 应答MEP的CAMEL实现.三种不同的哲学!
我愿意通过远程Websphere队列管理器支持本地MQ消息与交付确认(CoD)报告的交换,这样除了事务和持久性(即没有丢失,没有重复)之外,我还可以跟踪消息何时被消费并在发生延误时提出警报.
默认情况下,Websphere队列管理器在队列中的消息消耗完成时生成CoD报告.因此,在没有任何特定设置的情况下,当CAMEL端点消耗消息时,远程MQ客户端发送带有CoD标志的数据报(以及当时强制的ReplyToQ)将从队列管理器获得第一个回复作为MQ报告,然后是第二个(意外的)回复消息由CAMEL显式返回并包含CAMEL路由末尾的Exchange对象中剩余的内容,因为CAMEL假定存在JMSReplyTo字段的请求 - 应答EIP(从MQ ReplyToQ和ReplyToQMgr映射)被要求支持CoD回流).
如果没有特定设置,CAMEL默认也会在出站连接上采用请求 - 回复EIP/MEP.然后,CAMEL JMS/MQ端点将等待1个响应.当OUTbound消息是MQ上的JMS(因此具有MQRFH2头)时,这可以正常工作.当强制普通的vanilla MQ,即删除下面的MQRFH2头时,我无法使端点侦听器与相关的传入MQ报告匹配,尽管跟踪值看起来都是正确的(强制执行24个char相关ID以便截断更长的CorrelId值或空填充通过MQ无法对相关过滤器进行地理化处理).有没有人能够解决这个问题?
详细信息:虽然IBM JMS API接受传递特定的JMS属性值WMQ_MESSAGE_BODY = {1 | 0}/WMQ_TARGET_CLIENT = {1 | 0}来控制生成的消息中是否存在JMS头MQRFH2,但这些选项通过CAMEL变得不可用.必须使用CamelJmsDestinationName标头(如CAMEL JMS …
我使用初始化程序创建了一个Spring Boot项目,我正在尝试创建我的第一条消息,但我不知道从哪里开始.我熟悉使用JEE的相同过程,所以我想我需要创建一个工厂,一个发件人和一个消费者.
有人可以帮我吗?
jms ×10
java ×5
spring-jms ×2
apache-camel ×1
concurrency ×1
connection ×1
ibm-mq ×1
java-ee ×1
rollback ×1
session ×1
spring ×1
spring-boot ×1