async def METHOD_NAME(self, topic_name: str) -> None:
    if topic_name not in self._fetchers:
        # set the key as a lock, so it doesn't happen twice
        self._fetchers[topic_name] = None
        # declare the topic
        topic = self._reply_topic(topic_name)
        await topic.maybe_declare()
        self.app.topics.add(topic)
        await self.sleep(3.0)
        # then create the future
        self._fetchers[topic_name] = self.add_future(self._drain_replies(topic))