Files
upstream-watermill/docs/content/advanced/fanin.md
2026-09-15 21:27:46 +05:00

56 lines
1.5 KiB
Markdown

+++
title = "FanIn (merging topics)"
description = "Merging two topics into one with the FanIn component"
date = 2023-01-21T12:47:30+01:00
weight = -100
draft = false
bref = "Merging two topics into one with the FanIn component"
+++
## FanIn component
The FanIn component merges two topics into one.
### Configuring
{{% load-snippet-partial file="src-link/components/fanin/fanin.go" first_line_contains="type Config struct {" last_line_contains="CloseTimeout time.Duration" padding_after="1" %}}
### Running
You need to provide a Publisher and a Subscriber implementation for the FanIn component.
You can find the list of supported Pub/Subs on [Supported Pub/Subs page](/pubsubs/).
The Publisher and subscriber can be implemented by different message brokers (for example, you can merge a Kafka topic with a RabbitMQ topic).
```go
logger := watermill.NewStdLogger(false, false)
// create Publisher and Subscriber
pub, err := // ...
sub, err := // ...
fi, err := fanin.NewFanIn(
sub,
pub,
fanin.Config{
SourceTopics: upstreamTopics,
TargetTopic: downstreamTopic,
},
logger,
)
if err != nil {
panic(err)
}
if err := fi.Run(context.Background()); err != nil {
panic(err)
}
```
### Controlling FanIn component
The FanIn component can be stopped by cancelling the context passed to the `Run` method or by calling the `Close` method.
{{% load-snippet-partial file="src-link/components/fanin/fanin.go" first_line_contains="func (f *FanIn) Run" last_line_contains=" Close() error" padding_after="2" %}}