`
spdx4046
  • 浏览: 46965 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JMS超时处理方案1

    博客分类:
  • java
A 
阅读更多
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.SocketTimeoutException;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.QueueConnection;
import javax.jms.QueueSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* JMS连接工具类
* JMS连接超时处理,通过线程控制JMS启动连接时failover不停重试的时间。
* @version [版本号,YYYY-MM-DD]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class ConnUtils
{
   
    private ConnUtils()
    {
    }
   
    /**
     * get jms session
     * @param conn jms connection
     * @param timeout timeout
     * @param unit time unit
     * @param isTransaction isTransaction
     * @param ack ack
     * @return jms session
     * @throws LogCollectionException LogCollectionException
     * @throws IOException IOException
     */
    public static QueueSession connectWithTimeout(final QueueConnection conn,
            long timeout, TimeUnit unit, final Boolean isTransaction,
            final int ack) throws LogCollectionException, IOException
    {
        final BlockingQueue<Object> mailbox = new ArrayBlockingQueue<Object>(1);
        ExecutorService executor = Executors.newSingleThreadExecutor(new DaemonThreadFactory());
        executor.submit(new Runnable()
        {
            public void run()
            {
                try
                {
                    QueueSession session = conn.createQueueSession(isTransaction,
                            ack);
                    if (!mailbox.offer(session))
                    {
                        session = null;
                    }
                }
                catch (JMSException e)
                {
                    mailbox.offer(e);
                }
            }
        });
        Object result;
        try
        {
            result = mailbox.poll(timeout, unit);
            if (result == null)
            {
                if (!mailbox.offer("time out"))
                {
                    result = mailbox.take();
                }
            }
        }
        catch (InterruptedException e)
        {
            closeConn(conn);
            throw initCause(new InterruptedIOException(e.getMessage()), e);
        }
        finally
        {
            executor.shutdownNow();
        }
        if (result == null)
        {
            closeConn(conn);
            throw new SocketTimeoutException("Connect timed out");
        }
        if (result instanceof QueueSession)
        {
            return (QueueSession)result;
        }
        if (result instanceof JMSException)
        {
            closeConn(conn);
            throw new LogCollectionException("IO Execption",
                    (JMSException)result);
        }
        throw new IOException("Unknown reason!");
    }
   
分享到:
评论

相关推荐

    开源JMS服务器-openJms

    3. **异常处理**:处理可能出现的JMS异常,如消息丢失或超时。 **六、应用场景** 1. **解耦系统**:在分布式系统中,通过消息传递实现组件间的解耦。 2. **异步处理**:后台任务处理,避免阻塞主线程。 3. **事件...

    SOAP over JMS Protocal

    4. **错误处理**:客户端应具备错误处理机制,包括但不限于超时重试、异常捕获和日志记录,以确保消息传递的可靠性和服务的稳定性。 #### 服务器端的行为 服务器端接收到SOAP请求后,会根据消息的`contentType`和...

    JAVA消息服务JMS规范及原理详解.docx

    1. **消息中间件(JMS Provider)**:这是实现JMS协议的第三方组件,如Apache ActiveMQ、Kafka、RabbitMQ等,它们为应用提供消息传递服务。 2. **消息模式**:主要有两种,点对点(Point-to-Point, P2P)和发布/...

    Spring攻略(第二版 中文高清版).part1

    1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 ...

    Spring攻略(第二版 中文高清版).part2

    1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 ...

    Java并发编程与高并发解决方案

    "Java并发编程与高并发解决方案"这一主题涵盖了多个重要的技术概念和实践策略,旨在提高系统处理大规模并发请求的能力,保证服务的稳定性和性能。 首先,线程池(threadpool)是Java并发编程中的核心组件。通过复用...

    [重要]基于Websphere MQ持久化消息实现异步转同步—方案一

    总结,利用Websphere MQ的持久化消息特性,结合SpringMVC,我们可以设计出一个可靠的同步处理方案。这种方案虽然牺牲了一定的性能,但确保了业务流程的顺序性和数据一致性,对于那些对实时性和准确性有较高要求的...

    使用Atomikos处理ActiveMQ在Spring环境的XA事务

    Atomikos是Java平台上的一个强健的事务管理解决方案,它支持JTA(Java Transaction API)标准,可以处理复杂的分布式事务场景。 首先,我们需要理解什么是XA事务。XA事务是一种两阶段提交(2PC)协议,用于协调跨多...

    activeMQ总结

    ActiveMQ作为JMS的一个实现,提供了一种标准化的消息传递解决方案,适用于构建高并发、高可靠性的分布式系统。其点对点和发布/订阅模式满足了不同场景下的需求,而丰富的特性和广泛的语言支持使其成为许多企业级应用...

    activemq新手大全

    【标题】:“activemq...总结起来,activemq作为强大的消息中间件,提供了一整套解决方案,帮助开发者构建可靠、高效、可扩展的分布式系统。理解并掌握JMS基础和activemq的特性和使用,是提升系统架构能力的重要一步。

    atomikos分布式事务提交框架

    3. **事务协调器**:Atomikos包含一个事务协调器,它负责监控和控制事务的生命周期,包括开始、提交、回滚和超时处理。协调器通过两阶段提交(2PC)协议确保所有参与事务的节点都能达成一致。 4. **可扩展性**:...

    activemq-pool.jar.zip

    总的来说,`activemq-pool.jar`是ActiveMQ的重要组成部分,对于处理大量并发消息传递的Java应用来说,它提供了一种高效且可扩展的连接管理方案,降低了系统的资源消耗,提升了整体性能。正确理解和使用这个库,对于...

    EMSQueuejava实例_JinBaotao.pdf

    `receiver.receive(1000)`会阻塞等待1秒钟,直到接收到消息或超时。 ```java QueueReceiver receiver = session.createReceiver(queue); Message receiverMessage = receiver.receive(1000); ``` 这个简单的Java...

    atomikos-transactions-hibernate3.jar.zip

    Atomikos Transactions Hibernate3是一个专为Java环境设计的事务处理解决方案,它主要为Hibernate3提供了一个强大的、可扩展的事务管理器。这个解决方案的核心在于Atomikos Transactions,这是一个开源的、企业级的...

    中兴通java程序员面试题(高)

    1. **异常分类**:Java中的异常分为检查型异常(Exception)和运行时异常(RuntimeException)。检查型异常是程序在编译期间需要处理的,如IOException;运行时异常是程序运行时可能出现的错误,如...

    springboot+jta+atomikos

    Atomikos 是一个开源的JTA实现,它提供了全面的事务管理解决方案,支持分布式事务处理。Atomikos 可以无缝集成到Spring Boot应用中,为微服务架构中的事务管理提供强大的支持。它包括事务协调器、事务管理器以及对...

    ActiveMQ面试专题.docx

    ActiveMQ 是一个流行的开源消息代理,它遵循JMS(Java消息服务)标准,用于在分布式系统中传递消息。在面试中,对ActiveMQ的理解和掌握是评估候选人技能的关键部分。以下是一些关于ActiveMQ面试中可能涉及的重要知识...

    精通websphere MQ

    JMS API为消息的持久性、优先级、超时、交易、确认和消息选择器等提供了编程模型。而MQI编程则提供了直接与MQ队列管理器接口的编程模型。 WebSphere MQ 的安全性能是通过安全协议和数字证书来保障的。支持数据加密...

    AtomikosTransactions jar 包

    这个jar包包含了Atomikos Transactions Essentials的实现,版本为3.5.5,它是一个开源的、高性能的事务处理解决方案。 1. **事务管理**:Atomikos Transactions jar 提供了JTA(Java Transaction API)的实现,遵循...

Global site tag (gtag.js) - Google Analytics