标签: jms

JMS连接池或会话池

我对JMS连接池和JMS会话池之间感到困惑.

我有一个Java应用程序,它有大约20个线程处理从供应商产品接收的消息.在推送到JMS主题(所有20个线程的相同主题)之前,每个线程都会对消息进行一些处理.

我想确保没有线程等待免费的JMS连接,因为性能至关重要.但是,当我查看JMS连接工厂时,我看不到为JMS连接配置池大小的任何方法.

现在我真的很困惑.是我应该汇集的JMS会议吗?

任何帮助都非常感谢

谢谢乔

java connection session connection-pooling jms

9
推荐指数
2
解决办法
8624
查看次数

ActiveMQ和嵌入式代理

编辑:改述问题:

我想使用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)

java activemq-classic jms

9
推荐指数
1
解决办法
3万
查看次数

JMS客户端工具 - HermesJMS for Java 8的替代方案吗?


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,但这似乎不可能,因为没有这样的分支.

谢谢,
帕迪

java jms

9
推荐指数
3
解决办法
1万
查看次数

Spring JmsTemplate - 添加自定义属性

我正在使用Spring API JmsTemplateMappingJackson2MessageConverter(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消息设置一些自定义标头.我用谷歌搜索,找不到任何这样做的例子.你能帮我吗 ?

java spring jms spring-jms

9
推荐指数
1
解决办法
7432
查看次数

JMS回滚

我有一个涉及发送JMS消息的过程.该过程是交易的一部分.如果事务的后续部分失败,发送消息的前一部分之后的部分,我需要取消该消息.有一种想法是以某种方式设置消息,它不会被捡起一段时间,如果我需要回滚,那么我可以去取消消息.不知道消息,我不知道这个想法是否可行.或者,有更好的主意吗?谢谢

jms rollback

8
推荐指数
2
解决办法
6994
查看次数

ActiveMQ独立服务器部署或嵌入在Spring Webapp中

我要求设计一个通知/发布,其子系统发送电子邮件的应用程序.我计划使用jms发布/订阅(主题)消息来做到这一点

现在的可见性,将有20到30个订阅者,并且将要发布的消息数量将在每天30000到50000个消息的范围内.

我计划使用ActiveMQ JMS + Spring 3 + Tomcat 6实现 问题

  1. 我是JMS的新手,我想知道上面的负载是否很高?

  2. 我们真的需要在服务器上部署单独的ActiveMQ,还是我们在Webapp中使用嵌入式ActiveMQ就足够了?

  3. 单独的ActiveMQ服务器/嵌入式服务器有哪些优点/缺点?

activemq-classic jms setup-deployment java-ee

8
推荐指数
1
解决办法
4596
查看次数

JMS消息侦听器Weblogic的并发处理

我在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)

java concurrency jms

8
推荐指数
1
解决办法
7571
查看次数

什么是JMSType用于?

什么是JMSType用于?它可以用于定义消息有效负载吗?例如,有效负载可能用于添加产品,JMSType可能是AddProduct.

jms

8
推荐指数
1
解决办法
4885
查看次数

使用CoD over Camel JMS组件实现本机websphere MQ

我在使用Apache CAMEL实现Websphere MQ(WMQ)连接器时遇到了很多困难,该连接器可以无异常地处理MQ确认传递(CoD)报告,也不会以不需要的响应数据报的形式出现副作用.最后,我按照我想要的方式工作,如果您习惯于编写本机MQ客户端,那么这是一种非常标准和通用的方式.我在同一主题的帖子中记录了该方法,但我发现解决方案臃肿而复杂,并且非常感谢任何建议或示例,以使实现更清晰,更优雅.

我理解这个问题的根源在于MQ设计请求 - 回复消息交换模式(MEP)的方式,而不是JMS规范的方式,而不是其JMS组件中的请求 - 应答MEP的CAMEL实现.三种不同的哲学!

  1. WMQ具有MessageType标头(请参阅MQMD字段常量),其中请求值为1,回复为2,数据报为8(单向MEP).此外,值4用于以CoD(交付配置),PAN(肯定确认)和NAN(否定确认)的形式标记报告消息,其中 - 在消息流方面 - 也进行额外的回复信息.可以使用另一个名为"Report"的标题字段为Request消息,回复或数据报请求CoD,PAN和NAN ack,其中可以组合所有报告变体的标志.其他标头字段'ReplyToQ'和'ReplyToQMgr'指定原始发件人期望报告和回复的队列和队列管理器,以及固定的24字节'CorrelId'字段 - 可选 - 可以帮助将报告和回复与原始数据报或请求消息相关联.为了使其更复杂,实际上可以使用相同的原始消息ID和没有CorrelID发回回复和报告,或者在CorrelId中提供原始消息ID,或者在原始请求或数据报中已经指定时返回CorrelId值.IBM 通过WMQ提供JMS API,允许通过WMQ将纯JMS交换作为传输(在额外消息头名称MQRFH2的帮助下),或将本机MQ消息映射到JMS消息,反之亦然.
  2. 另一方面,JMS规范提供了一个可选的'JMSReplyTo'头字段和一个'JMSCorrelationID',但是确实将MEP语义保留给客户端应用程序; 即在规格中陈述:" 答复可能是可选的;由客户自行决定. "
  3. CAMEL以XML或Java DSL中的"路由"和内部Exchange对象模型为特征,目的是支持EIP模式,其中包括Request-Reply模式.然后CAMEL在其JMS组件中假定如果设置了JMSReplyTo字段,则这必然是期望回复的请求,导致Exchange的Out部分(或者如果Out为空,则部分修改)返回到JMSReplyTo中定义的队列. .

我愿意通过远程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 …

jms apache-camel ibm-mq

8
推荐指数
1
解决办法
3325
查看次数

如何在spring boot中实现jms队列

我使用初始化程序创建了一个Spring Boot项目,我正在尝试创建我的第一条消息,但我不知道从哪里开始.我熟悉使用JEE的相同过程,所以我想我需要创建一个工厂,一个发件人和一个消费者.

有人可以帮我吗?

jms spring-jms spring-boot

8
推荐指数
1
解决办法
2万
查看次数