首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring、Reactor和@Consumer

Spring、Reactor和@Consumer
EN

Stack Overflow用户
提问于 2016-01-12 00:01:20
回答 3查看 1.5K关注 0票数 2

我有一个Spring Boot项目,它使用reactor来执行异步任务。我已经开始了将项目升级到Spring Boot 1.3.1的任务。作为一个副作用,它似乎使用了一个新版本的反应堆。我正在试图弄清楚如何让它与新的反应堆一起工作。我使用@Consumer和@Selector注解来告诉它使用什么类和方法来处理类似这样的事件:

代码语言:javascript
复制
@Consumer
public class MyReceiver {

  @Selector(value = "someEvent", reactor = "@rootReactor")
  public void receiveEvent(SomeObject someObject) {
    ...
  }

}

我之前是通过在服务类中这样做来通知接收方的:

代码语言:javascript
复制
@Autowired
Reactor rootReactor;

public void someMethod() {
  ...
  rootReactor.notify("someEvent", Event.wrap(someObject));
}

我已经想好了,我需要将rootReactor内容更改为:

代码语言:javascript
复制
@Autowired
EventBus eventBus;

public void someMethod() {
  ...
  eventBus.notify("someEvent", Event.wrap(someObject));
}

但我不确定在消费者方面我需要做些什么。@Selector不再支持reactor属性,所以您可以将其更改为eventBus,但是现在命名的detault事件总线是什么?当我仅使用value属性尝试@Selector时,我开始得到一个NPE。

EN

回答 3

Stack Overflow用户

发布于 2017-01-09 00:23:04

我刚刚用reactor-spring-messaging 2.0.7.RELEASE尝试了一下,即使自动连接的字段是私有的,它也能正常工作。该字段确实必须准确命名为"eventBus“,或者,如果您为其命名其他名称,则必须在@Selector注释中指定其替代名称。

如果你愿意,你可以@Autowire或者@Inject到你的构造函数中并分配一个属性。这种方式工作得很好,优点是IDE不会因为声明了一个未使用的字段而生气::

代码语言:javascript
复制
  private final EventBus eventBus;

  @Autowired
  private SomeObject(EventBus eventBus) {
    this.eventBus = eventBus;
  }

但是,关于字段名称的规则也同样适用。我倾向于更喜欢构造函数注入而不是注入字段。

票数 1
EN

Stack Overflow用户

发布于 2016-02-16 22:00:52

您的使用者必须定义一个自动连接的公共(!)eventBus类型的属性。消费者扫描并注册到总线上。这不是一个很好的解决方案,但它应该可以工作。

代码语言:javascript
复制
@Consumer
public class MyReceiver {
   @Autowired
   public EventBus eventBus;

   @Selector(value = "someEvent", reactor = "@rootReactor")
   public void receiveEvent(SomeObject someObject) {
       ...
   }
}

}

票数 0
EN

Stack Overflow用户

发布于 2016-06-29 06:17:04

在从Reactor v1.x迁移到Reactor v2.x的过程中,Reactor被重命名为EventBus,即reflected in the @Selector annotation

你的@Selector是从..

代码语言:javascript
复制
@Selector(value = "someEvent", reactor = "@rootReactor")

为了..。

代码语言:javascript
复制
@Selector(value = "someEvent", eventBus = "@rootReactor")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34725913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档