Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
elixir-golos
7 лет назад

Релиз ExGolos v0.6: обработка ивентов блокчейна с помощью GenStage


На связи @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) вычислений, устойчивость к сбоям и относительно простое создание распределенных кластеров.

(∩^o^)⊃━☆゜.*

2
3677.718 GOLOS
На Golos с February 2017
Комментарии (1)
Сортировать по:
Сначала старые