我是反应式编程的新手,我尝试实现一个非常基本的方案。 我想在每次将文件拖放到特定文件夹时向kafka发送消息。 我认为我不太了解基本知识...所以请您能帮我吗?
所以我有几个问题: Smallrye反应式消息传递和Smallrye反应流操作符之间有什么区别?
我有这个简单的代码:
@Outgoing( "my-topic" )
public PublisherBuilder<Message<MessageWrapper>> generate() {
if(Objects.isNull(currentMessage)){
//currentMessage is an instance variable which is null when I start the application
return ReactiveStreams.of(new MessageWrapper()).map(Message::of);
}
else {
//currentMessage has been correctly set with the file information
LOGGER.info(currentMessage);
return ReactiveStreams.of(currentMessage).map(Message::of);
}
}
当代码进入if语句时,一切正常,我得到了我的对象的JSON序列化将为空值的信息。但是我不明白为什么当我的代码转到else语句时,主题什么都没有?似乎if语句的.of指令破坏了数据流或类似的内容...
如何保持连续的流对新删除的文件进行“反应”? (或其他类似HTTP GET请求之类的事件)...
例如,如果我不返回PublisherBuilder的实例而是返回一个Integer,那么我的kafka主题将被非常庞大的Integer值流填充。这就是为什么示例在发送消息时使用一些时间间隔的原因...
我应该使用一些CompletationStage还是CompletableFuture? RxJAva2?使用哪个库有点令人困惑(vertx,smallrye,rxjava2,microprofile等)
之间的区别是什么?
在哪种情况下使用哪个?
非常感谢您!
答案 0 :(得分:0)
让我们先从小号反应消息和小号反应流操作符之间的区别开始:小号反应流操作符与小号反应消息发送方相同,但是它对{{3 }}。由于大多数响应消息提供程序在后台使用Vert.x,因此它将以事件循环样式处理您的消息,这意味着它将在单独的线程中运行。有时,您需要将一些ctx从基础线程传播到新线程中(例如:填充CDI和Tx上下文以执行某些JPA实体管理器逻辑)。 ctx传播在这里有帮助。
用于方法签名。您可以查看MicroProfile-context-propagation第3,4和5节的官方文档。每个文档都有不同的用例。您要使用哪种口味取决于您。
什么时候使用什么?如果您不在响应式上下文中运行,则可以使用以下内容发送消息。
@注入 @Channel(“我的频道”) 发射极发射器;
对于消息使用,您可以使用如下方法签名:
@Incoming(“频道2”) 公共CompletionStage doSomething(消息anEvent)
或
@Incoming(“频道2”) 公共无效doSomething(String anEvent)
希望有帮助。