На связи @ontofractal. В этом релизе интегрирован GenStage, новый стандарт спецификации для обработки и обмена ивентами между процессами Elixir/Erlang. Внедрение GenStage упрощает Elixir разработчикам взаимодействие с модулем ExGolos: достаточно запустить GenStage Consumer с опцией subscribe_to: Golos.Stage.Blocks.Producer
или subscribe_to: Golos.Stage.Txs.ProducerConsumer
. Оба producer-а работают в режиме BroadcastDispatcher -- каждый поступающий ивент будет отправлен всем consumers.
По сути, операции записывающиеся в блокчейн в каждом блоке, являются ивентами, поэтому GenStage особенно хорошо подходит для решения подобного класса задач. Я почти уверен,что GenStage останется основным интерфейсом ExGolos для потоковой обработки ивентов.
Changelog
- breaking: удалена предыдущая версия стримера операций
- удалена опция
stream_to
в конфиге - добавлен модуль
Golos.Stage.Blocks.Producer
производящий блоки Golos в режиме BroadcastDispatcher - добавлен модуль
Golos.Stage.Ops.ProducerConsumer
, потребляющий блоки и производящий операции в режиме BroadcastDispatcher - добавлен супервайзер для новых GenStage модулей
- добавлен пример базового GenStage Consumer для операций
- обновлено readme
Пример GenStage consumer для обработки стрима операций
defmodule Golos.Stage.Ops.ExampleConsumer do
use GenStage
require Logger
def start_link(args, options \\ []) do
GenStage.start_link(__MODULE__, args, options)
end
def init(state) do
{:consumer, state, subscribe_to: state.subscribe_to}
end
def handle_events(events, _from, state) do
for op <- events do
Logger.info """
New operation:
#{inspect op}
"""
end
{:noreply, [], state}
end
end
Roadmap
ExGolos находится в активной разработке.
исследовать использование GenStage- Улучшить документацию
- Добавить оставшиеся стракты
- Добавить возможность броадкаста транзакций
Больше об Elixir
Elixir -- функциональный язык программирования созданный на основе Erlang/OTP. Его основные преимущества: удобные примитивы параллелизации и одновременности(concurrency) вычислений, устойчивость к сбоям и относительно простое создание распределенных кластеров.
@elixir-golos Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Если вы хотите поддержать проект Доска Почета, вы можете проголосовать за это уведомление.