我需要实现以下架构:
N个线程正在监视BlockedQueue<Message>
(我甚至可以认为我们可以在不久的将来使用ActiveMQ。)
当捕获消息时,我对此消息执行了一些修改,我需要将其保留在MongoDB数据库中。
服务是这样的:
@Repository(value="service")
public class Service {
@Autowired
MongoTemplate mongoTemplate;
public void save(Message message){
//do something to message
doSomething(message);
//persist it
mongoTemplate.save(message, "messages");
}
//etc...
}
现在我需要在线程之间共享Service
对象。
如何使此服务线程安全?将Service对象设置为singleton(设计模式)并使用getInstance()
方法工厂将其注入Runnabble bean是不错的做法?
我的mongoDb模板是否应该打开N个连接(连接池的种类)?
可能还有一些其他方法可以在线程之间共享此类服务吗?
答案 0 :(得分:1)
MongoDB驱动程序已经处理连接池,如果在调用期间不修改Message
对象,它也是线程安全的。因此,如果doSomething(message)
是线程安全的,那么您的服务代码应该没问题。
注意:mongoTemplate.save(消息,“messages”)似乎有不正确的参数顺序。您应该首先传递集合名称。