当前位置: 首页 > 知识库问答 >
问题:

JMS毒药消息删除

漆雕宏浚
2023-03-14

我试图在WebLogic10r3服务器上调试一个web应用程序主机。该应用程序通过Java消息驱动bean接收来自外部IBM JMS队列(classname:com.IBM.mq.JMS.mqqueue)的输入。

我写了一个小的测试应用程序来连接到队列并发送测试消息。目前的问题是测试消息会生成异常,并且不知何故它会被放回队列中,并一次又一次地循环。这会产生大量异常,使日志不可读。

代码概述了JMS生产者:

        static String rawTradeUpload = "some long chunk of data"

        Hashtable ht = new Hashtable();

        ht.put(Context.INITIAL_CONTEXT_FACTORY,
                weblogic.jndi.WLInitialContextFactory.class.getName());

        //ht.put(Context.PROVIDER_URL, "t3://gprimeap1d.eur.nsroot.net:12016");
        ht.put(Context.PROVIDER_URL, "t3://gprimeap1d.eur.nsroot.net:12001");

        ht.put(Context.SECURITY_PRINCIPAL, "weblogic");

        ht.put(Context.SECURITY_CREDENTIALS, "welcome5");

        Connection con = null;
        Session s = null;

        try {
            if(ctx == null)

                    ctx = new InitialContext(ht);


            ConnectionFactory myConnFactory = null;

            Queue myQueue = null;

                myConnFactory = (ConnectionFactory) ctx
                        .lookup("SwiftConnectionFactory");

                con = myConnFactory.createConnection();

                s = con.createSession(false, Session.AUTO_ACKNOWLEDGE);



                myQueue = (Queue) ctx
                        .lookup("IncomingSwiftFxQueue");


                MessageProducer producer = s.createProducer(myQueue);
                Message msg = s.createTextMessage(rawTradeUpload);

                producer.send(msg); 
                    s.close();

            con.close();

        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

共有1个答案

漆雕誉
2023-03-14

您是否尝试过设置重新传递限制并定义错误队列目的地,以便在进行x次尝试后,容器负责将消息移动到错误队列?这使您可以保持主队列中没有毒药消息和专用错误队列来浏览/调试问题。

 类似资料:
  • 我第一次试着让它工作,所以请容忍我。我正在尝试学习Kafka的检查点设置和处理“错误”消息,在不丢失状态的情况下重新启动。 用例:使用检查点。从Kafka那里读取一个整数流,保持一个连续的和。如果读到“坏”Kafka消息,请重新启动应用程序,跳过“坏”消息,保持状态。我的流看起来像这样: set1,5 set1,7 set1,foobar set1,6 我希望我的应用程序保留它看到的整数的运行总和

  • 我需要从两个队列加载消息,并且我使用ActiveMQ,我必须实现重试机制,以防出现任何错误或网络或应用程序服务器故障并加载回同一个队列。此外,我想将任何有害消息加载到DLQ。 请让我知道我是否可以通过Spring JMS实现这些。此外,请提供一些很好的例子来完成这项任务。我检查了Spring JMS留档,没有太多细节。

  • 我想使用SpringBoot向ActiveMQ队列发送消息。应用程序应在发送后终止,但仍保持活动状态。 这是我的申请代码: 在没有任何父节点的情况下使用以下依赖项(Maven): 和一行

  • 我正在尝试让JMS消费者致力于ActiveMQ服务器,但是我遇到了一些问题,这些解决方案似乎只会导致更多问题。 我正在使用Spring的DMLC(cacheLeve设置为CACHE\u连接)和CachingConnectionFactory(cachingConsumers设置为true),将Activemq自己的连接工厂包装在部署在Jboss AS中的Webapp中。 据此http://acti

  • 在Spring集成中使用出站网关时,我试图在JMS标头中发送回复Q详细信息。我了解到JIRA#INT-97中的增强功能在将Spring消息标头发送到JMS目标之前将其复制到JMS标头。 在将消息发送到出站网关之前,将消息头设置如下。message.getHeader(). setAtcm(JmsTargetAdapter.JMS_REPLY_TO, myReplyDestation); 但是我无法

  • 问题内容: 我阅读了今年的UberConf的幻灯片,其中一位发言者认为Spring JMS给您的消息队列系统增加了性能开销,但是在幻灯片中我看不到任何证据支持这一点。演讲者还提出了点对点比传统“发布- 订阅”方法更快的情况,因为每个消息仅发送一次,而不是广播给每个消费者。 我想知道是否有经验的Java消息传递专家可以在这里介绍一些技术问题: 使用Spring JMS而不是单纯的JMS实际上会产生性