我需要实现以下架构:
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 对象设置为单例(设计模式)并使用 getInstance()
将其注入(inject)到 Runnabble beans 是个好习惯吗?方法工厂?
我的 mongoDb 模板应该打开 N 个连接(某种连接池)吗?
可能还有其他方法在线程之间共享此类服务吗?
MongoDB 驱动程序已经处理连接池,并且如果您在调用期间不修改 Message
对象,它也是线程安全的。因此,如果 doSomething(message)
是线程安全的,那么您的服务代码应该没问题。
注意:mongoTemplate.save(message, "messages") 似乎参数顺序不正确。您应该首先传递集合名称。
我是一名优秀的程序员,十分优秀!