56 lines
1.5 KiB
Markdown
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" %}}
|