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 它不像其他对象(例如 Connection
或 JMSContext
)。这种“优化”可能不会产生显着的统计影响,但只有仔细测试才能明确这一点。
我想将消息发送到 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 它不像其他对象(例如 Connection
或 JMSContext
)。这种“优化”可能不会产生显着的统计影响,但只有仔细测试才能明确这一点。