我想使用jmstemplate(使用activemq jms代理)发送大型字符串消息(3-5 MB)。在发送消息的过程中,我关闭了经纪人;为什么我不能在catch(Exception e)中捕获引发的异常?我应该怎么处理这个异常?

public class MessageSenderServiceImpl implements MessageSenderService 
{ 
    private JmsTemplate jmsTemplate; 
 
    @Override 
    @Transactional 
    public void sendMessage(final String messageContent, final String destination) throws SendingMessageException 
    { 
        try 
        { 
            jmsTemplate.send(destination, new MessageCreator() 
            { 
                @Override 
                public Message createMessage(Session session) throws JMSException 
                { 
                    BytesMessage byteMessage = session.createBytesMessage(); 
                    try 
                    { 
                        byteMessage.writeBytes(messageContent.getBytes("UTF-8")); 
                        return byteMessage; 
                    }  
                    catch (UnsupportedEncodingException e) 
                    { 
                        e.printStackTrace(); 
                        throw new JMSException(e.getMessage()); 
                    } 
                } 
            });          
        } 
        catch(Exception e) 
        { 
            throw new SendingMessageException(e.getMessage(),e); 
        } 
    } 
 
    public void setJmsTemplate(JmsTemplate jmsTemplate) 
    { 
        this.jmsTemplate = jmsTemplate; 
    } 
} 


提前致谢。

请您参考如下方法:

这只是一个猜测,但这可能是因为Spring的JmsTemplate将异常重新抛出为JmsException,这是运行时异常,因此您需要捕获Throwable才能真正捕获它。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!