JMS 生产者最佳实践

JMS Producer Best Practices

我想将消息发送到 servlet 顶部过滤器中的队列。

public class Filter implements javax.servlet.Filter {


    @Inject
    JMSContext context;

    @Resource
    private Queue queue;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        long start = new Date().getTime();
        filterChain.doFilter(servletRequest, servletResponse);
        JMSProducer producer = context.createProducer();

...

考虑到性能和资源利用率,最好在 @PostConstruct 方法中创建一次,或者没关系,我可以在每个请求中创建它?

相对而言,少做通常需要更少的资源并且更快,因此创建 JMSProducer 一次并重复使用它几乎肯定比每次创建它对您的用例“更好” .

但是,值得注意的是,对于大多数 JMS 实现,生产者是一个轻量级对象,因此 caching/reusing 它不像其他对象(例如 ConnectionJMSContext)。这种“优化”可能不会产生显着的统计影响,但只有仔细测试才能明确这一点。