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

JMS超时处理方案2

    博客分类:
  • java
A 
阅读更多
/**
     * set client id
     * @param conn jms connection
     * @param timeout timeout
     * @param unit time unit
     * @return Boolean true or false
     * @throws LogCollectionException LogCollectionException
     * @throws IOException IOException
     */
    public static Boolean setClientId(final QueueConnection conn, long timeout,
            TimeUnit unit) 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
                {
                   
                    conn.setClientID(UUID.randomUUID().toString());
                    mailbox.offer(Boolean.TRUE);
                }
                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 Boolean)
        {
            return (Boolean)result;
        }
        if (result instanceof JMSException)
        {
            closeConn(conn);
            throw new LogCollectionException("IO Execption",
                    (JMSException)result);
        }
        throw new IOException("Unknown reason!");
    }
   
    /**
     * wrapper cause.
     * @param <T>  throwable
     * @param wrapper cause wrapper
     * @param wrapped throwable
     * @return
     */
    private static <T extends Throwable> T initCause(T wrapper,
            Throwable wrapped)
    {
        wrapper.initCause(wrapped);
        return wrapper;
    }
   
    /**
     * close connection
     *
     * @param conn jms connection
     */
    private static void closeConn(Connection conn)
    {
        if (conn != null)
        {
            try
            {
                conn.close();
            }
            catch (JMSException e)
            {
                LOGGER.error(e.toString(), e);
            }
        }
    }
}

/**
* 内部私有类
* 线程工厂,ExecutorService调用newThread方法自动创建线程。
* @version [版本号,YYYY-MM-DD]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
class DaemonThreadFactory implements ThreadFactory
{
    public Thread newThread(Runnable r)
    {
        Thread t = Executors.defaultThreadFactory().newThread(r);
        t.setDaemon(true);
        return t;
    }
}
分享到:
评论

相关推荐

    开源JMS服务器-openJms

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

    SOAP over JMS Protocal

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

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

    JMS的这两种模式为企业级应用提供了灵活的异步通信解决方案,适用于需要解耦组件、提高系统稳定性和容错能力的场景。例如,P2P模式适合对消息处理顺序有要求且每个消息必须被唯一处理的场景,而Pub/Sub模式适合需要...

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

    11.11.2 解决方案 472 11.11.3 工作原理 472 11.12 使用GORM查询 475 11.12.1 问题 475 11.12.2 解决方案 475 11.12.3 工作原理 475 11.13 创建自定义标记 477 11.13.1 问题 477 11.13.2 解决方案...

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

    11.11.2 解决方案 472 11.11.3 工作原理 472 11.12 使用GORM查询 475 11.12.1 问题 475 11.12.2 解决方案 475 11.12.3 工作原理 475 11.13 创建自定义标记 477 11.13.1 问题 477 11.13.2 解决方案...

    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新手大全

    2. **activemq消息确认机制**:activemq允许消费者确认消息的接收,以确保消息已被正确处理,可以选择自动或手动确认模式。 3. **activemq持久化机制**:activemq通过将消息写入磁盘来实现持久化,即使服务器重启,...

    atomikos分布式事务提交框架

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

    activemq-pool.jar.zip

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

    atomikos-transactions-hibernate3.jar.zip

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

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

    2. **sleep()和wait()的区别**:sleep()是Thread类的一个静态方法,用于暂停当前线程的执行一段时间,不释放锁;wait()是Object类的方法,它使当前线程等待,直到被其他线程唤醒或超时,会释放持有的锁。 3. **线程...

    EMSQueuejava实例_JinBaotao.pdf

    【Java与TIBCO EMS Queue交互】 在Java应用程序中,使用TIBCO Enterprise Message Service (EMS) 来...此外,理解JMS API的其他部分,如Topic、MessageListener和持久化,将有助于构建更健壮的分布式消息传递解决方案。

    AtomikosTransactions jar 包

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

    springboot+jta+atomikos

    2. 配置Atomikos,包括设置事务超时时间、数据源等。 3. 在服务层,使用`UserTransaction`接口或`@Transactional`注解来声明事务边界。 4. Atomikos会自动检测到这些事务边界,并在后台处理事务的提交或回滚。 通过...

    精通websphere MQ

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

    分布式JAVA应用 基础与实践

    2. 容错与故障恢复:使用心跳检测、超时重试、幂等性设计等手段保证系统的高可用性。 3. 性能优化:通过缓存、异步处理、批量操作等方式提高分布式系统性能。 六、实战案例分析 本教程还将包含实际项目中的分布式...

Global site tag (gtag.js) - Google Analytics