Мне нужно реализовать следующую архитектуру:Как сохраняться объект в ThreadPoolTaskExecutor
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
объект между потоками.
Как я могу сделать эту службу безопасной? Будет ли хорошая практика сделать объект службы как singleton (Design Pattern) и ввести его в Runnabble beans с использованием фабрики getInstance()
?
Должен ли мой шаблон mongoDb открывать N соединений (вид пула соединений)?
Может быть, есть другие способы обмена такой службой между потоками?
Во-первых, я лично не считаю, что «Сервис» - хорошее имя для класса. Можете ли вы просто сделать 'save' метод' synchronized'? – fiction