module Main (main) where
import Prelude hiding (sequence)
import Control.Monad (when)
import Control.Monad.Parallel (sequence)
import Data.Foldable (for_)
import Data.Either (isLeft)
import Data.Text (pack)
import Data.Text.Encoding (encodeUtf8)
import Kafka.Producer.Sync
import Kafka.Producer
producerProps :: ProducerProperties
producerProps = brokersList [BrokerAddress "localhost:9092"]
<> sendTimeout (Timeout 10000)
<> logLevel KafkaLogDebug
message :: Int -> ProducerRecord
message suffix = ProducerRecord
{ prTopic = TopicName "topic"
, prPartition = UnassignedPartition
, prKey = Nothing
, prValue = Just . encodeUtf8 . pack . show $ suffix
}
main :: IO ()
main =
newSyncProducer producerProps >>= \case
Left _ -> error "Couldn't create sync producer"
Right producer -> do
putStrLn "Running Kafka sync tests"
let action = produceRecord producer . message
res <- sequence $
fmap action [1..100] ++
fmap action (replicate 1 100)
for_ res $
either (putStrLn . (<>) "got error: " . show) pure
when
(any isLeft res)
(error "Couldn't publish messages in parallel")
putStrLn "Successfully published messages"