Я думаю, что лучший способ описать агента - это запущенный процесс, который сохраняет некоторое состояние и может взаимодействовать с другими агентами (или веб-страницами или базой данных). При написании приложения на основе агентов вы часто можете использовать несколько агентов, которые отправляют сообщения друг другу.
Я думаю, что идея создать агента, который читает твиты из Интернета и сохраняет их в базе данных, является хорошим выбором (хотя вы также можете хранить твиты в памяти как состояние агента).
Я бы не оставлял соединение с базой данных открытым все время - MSSQL (и MySQL, вероятно, тоже) реализует пул соединений, поэтому он не будет закрывать соединение автоматически, когда вы его отпустите. Это означает, что более безопасно и аналогично эффективно повторно открывать соединение каждый раз, когда вам нужно записать данные в базу данных.
Если вы не ожидаете получения большого количества сообщений об ошибках, я, вероятно, сделал бы то же самое для файлового потока (при записи вы можете открыть его, чтобы новый контент был добавлен в конец).
Работа очереди агентов F # заключается в том, что они обрабатывают сообщения одно за другим (в вашем примере вы ожидаете сообщение, используя inbox.Receive()
. Когда очередь содержит несколько сообщений, вы получите их одно за другим (в цикле).
Если вы хотите обрабатывать несколько сообщений одновременно, вы можете написать агента, который ожидает, скажем, 10 сообщений, а затем отправляет их в виде списка другому агенту (который затем будет выполнять массовую обработку).
Вы также можете указать параметр timeout
для метода Receive
, чтобы вы могли ждать не более 10 сообщений, пока они все приходят в течение одной секунды - таким образом, вы можете довольно элегантно реализовать массовую обработку это не хранит сообщения в течение длительного времени.