标签: event-bus

如何通过事件总线告知GWT单元格小部件数据是否已更改?

我有一个GWT单元树,用于显示CMS的文件结构.我正在使用AsyncDataProvider从我创建的自定义RPC类加载数据.我还有一个Web Socket系统,它将从也在系统中工作的其他客户端广播事件(文件创建,重命名,移动,删除等).

我想要解决的是当我收到其中一个事件时,我如何正确更新我的Cell Tree?

我想这个问题类似于在页面上有两个我的Cell Tree实例,它们呈现相同的服务器端数据,并希望确保当用户更新一个时,另一个更新也通过使用EventBus.

我觉得这应该很简单,但我现在花了大约6个小时才没有进展.我的代码包含在下面:

注意:我没有使用RequestFactory,即使它看起来像我是我的自定义RPC框架.此外,FileEntity只是一个文件的简单表示,其名称可以访问getName().

private void drawTree() {

        // fileService is injected earlier on and is my own custom rpc service
        TreeViewModel model = new CustomTreeModel(new FileDataProvider(fileService));
        CellTree tree = new CellTree(model, "Root");

        tree.setAnimationEnabled(true);

        getView().getWorkspace().add(tree);

    }

    private static class CustomTreeModel implements TreeViewModel {

        // I am trying to use a single AsyncDataProvider so I have a single point of loading data which I can manipulate (Not sure if this is …
Run Code Online (Sandbox Code Playgroud)

gwt event-bus

6
推荐指数
1
解决办法
1116
查看次数

使用Guava EventBus进行Java多线程处理

我正在使用番石榴事件总线.我有一个类似服务器的对象应该一直在运行,监听要发布给b us的事件.所以在junit测试中(MyObject是测试中的类),我在它自己的线程中创建它来模拟这个并阻止阻塞:

  @Test    
  public void test() {
      EventBus eventBus = new EventBus();

      Thread thread= new Thread() {
         @Override
         public void run()
         {
            logger.debug("Creating new thread");
            MyObject myObject = new MyObject(eventBus);
         }
      };

      thread.start();
      ...
  }
Run Code Online (Sandbox Code Playgroud)

一切都很好,myObject是在自己的线程Thread1中创建的.然后,我在测试中将事件发布到事件总线:

eventBus.post(triggerObject);
Run Code Online (Sandbox Code Playgroud)

我发现的奇怪的事情是,我在MyObject类中的订阅方法的所有操作/日志记录都在主线程中再次执行.myObject等待来自某些其他部分的响应,这会阻止我的测试,因为它在主线程中.为什么会这样?我在EventBus或Java线程上做错了吗?

java multithreading guava event-bus

6
推荐指数
1
解决办法
5524
查看次数

静态初始化器的合法用途?

我记得几年前我使用静态初始化程序来调用类级别的设置操作.我记得它有非常奇怪的行为,我只是决定避开他们.也许是因为我弄乱了最上层的订单或成为新手.但我遇到了重新审视它们的需要,我想确保没有一种更简洁的方法.

我知道它不时髦,但我经常有数据驱动的类,它们维护从数据库导入的静态实例列表.

public class StratBand { 
      private static volatile ImmutableList<StratBand> stratBands = importFromDb();

      private final int minRange;
      private final int maxRange;

      private static ImmutableList<StratBand> importFromDb() { 
            //construct list from database here
      }
      //constructors, methods, etc
}
Run Code Online (Sandbox Code Playgroud)

当我有几十个像这样的表驱动类时,这个模式非常简洁(是的,我知道它将类与一个数据/实例源紧密结合).

但是,当我发现Google Guava的优点时,我希望在发布特定事件时使用EventBus更新静态列表.我会创建一个静态的最终布尔变量,只是为了调用初始化注册的静态方法.

public class StratBand { 
      private static volatile ImmutableList<StratBand> stratBands = importFromDb();
      private static final boolean subscribed = subscribe();

      private final int minRange;
      private final int maxRange;

      private static ImmutableList<StratBand> importFromDb() { 
            //construct list from database here
      }
      //constructors, methods, etc

      private …
Run Code Online (Sandbox Code Playgroud)

java static-initialization guava event-bus

6
推荐指数
1
解决办法
143
查看次数

事件总线片段取消注册

我有一个注册到事件总线的splashscreen Fragment:

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}
Run Code Online (Sandbox Code Playgroud)

如果屏幕进入自动锁定(或任何其他可以调用onStop的事件),则容器活动将进入onStop,并且该片段不再能够接收(网络)事件.我正在考虑 "取消注册"逻辑移动到onDestroy方法.这是个好主意吗?

android event-bus android-fragments greenrobot-eventbus

6
推荐指数
1
解决办法
6416
查看次数

EventBus 3.0 registerSticky已弃用

无法解析方法registerSticky(this)代替寄存器(this)

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}
Run Code Online (Sandbox Code Playgroud)

我在Gradle中试过'org.greenrobot:eventbus:3.0.0'和'de.greenrobot:eventbus:3.0.0-beta1'.不知道为什么这种方法没有出现

android event-bus android-gradle-plugin

6
推荐指数
1
解决办法
1535
查看次数

事件总线与本地广播经理:哪一个最好

我的应用程序在很大程度上依赖于本地广播,因为每次活动调用都会调用广播注册方法,所以移动到任何事件总线都很好.

使用本地广播管理器的两个主要问题.

  1. 每项活动都需要注册
  2. 注册方法执行时间(注册约10个动作)

我认为事件总线将改善我的应用程序的整体执行和性能.

android event-bus

6
推荐指数
2
解决办法
4801
查看次数

otto eventbus for android在发布版本中表现不同

我有一个单件服务类,它按照设定的时间表从服务器中提取数据.一旦客户端收到数据,我就触发bus.post(new NewServerResponseEvent());(http://square.github.io/otto/)

然后在我的片段中我这样做:

@Override
public void onResume() {
    super.onResume();
    eventBus.register(this);
}

@Override
public void onPause() {
    super.onPause();
    eventBus.unregister(this);
}

@Subscribe
public void handleNewServerData(NewServerResponseEvent e) {
    refreshView();
}
Run Code Online (Sandbox Code Playgroud)

只要我在我的测试设备上进行开发时,一切都运行得非常顺利.一旦我构建了一个发布版本并将其放入Play商店,handleNewServerData()就永远不会调用该函数.

我无法理解这一点.将整个事物作为发布版本运行会有什么不同?是否有可能在另一个线程中发生的事情无法发布给我的订阅者?

有人能指出我正确的方向吗?

提前致谢

events multithreading android event-bus otto

5
推荐指数
1
解决办法
618
查看次数

为 avro 架构的十进制逻辑类型和字节类型创建 json 表示

我正在尝试按照以下 avro 模式创建 JSON 字符串,用于十进制值。 https://avro.apache.org/docs/1.8.2/spec.html#Logical+Types

{
 "name": "score",
 "type": "bytes",
 "logicalType": "decimal",
 "precision": 10,
 "scale": 5
 }
Run Code Online (Sandbox Code Playgroud)

价值

"score":3.4,
Run Code Online (Sandbox Code Playgroud)

我得到了例外

Caused by: org.apache.avro.AvroTypeException: Expected bytes. Got VALUE_NUMBER_FLOAT.
Run Code Online (Sandbox Code Playgroud)

如果我给出“\u0000”而不是 3.4,那么它可以工作,但这是 0 的表示,我将如何获得 3.4 的表示?现在我正在创建硬编码的 JSON 字符串,但将来我必须将输出转换为十进制,我如何在 Scala 中做到这一点。

有没有办法将值转换为十进制逻辑格式?

scala event-bus avro avro-tools

5
推荐指数
1
解决办法
1649
查看次数

如何在构建时将类添加到 Quarkus 类加载器

我正在尝试构建 Quarkus 应用程序,并将外部类用作 EventBus 中的消息。

@ConsumeEvent("VAVR")
Uni<Try<String>> tryUni(String message) {
    return Uni.createFrom().item(Try.of(() -> {
        throw new TestException("From VAVR", 400);
    }));
}
Run Code Online (Sandbox Code Playgroud)

我在构建时得到的是

2020-04-18 19:35:59,076 ERROR [io.qua.application] (main) Failed to start application: java.lang.ClassNotFoundException: io.vavr.control.Try<java.lang.String>
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:322)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:275)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:322)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:275)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at io.quarkus.deployment.steps.VertxProcessor$build38.deploy_0(VertxProcessor$build38.zig:1123)
at io.quarkus.deployment.steps.VertxProcessor$build38.deploy(VertxProcessor$build38.zig:36)
at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:194)
at io.quarkus.runtime.Application.start(Application.java:90)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at io.quarkus.runner.bootstrap.StartupActionImpl.run(StartupActionImpl.java:99)
at io.quarkus.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:60)
at io.quarkus.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:236)
at io.quarkus.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:39)
at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:131)
at …
Run Code Online (Sandbox Code Playgroud)

java event-bus quarkus

5
推荐指数
0
解决办法
1830
查看次数

构建微服务事件总线和 REST api (python / Flask)

背景

我正在使用微服务架构构建我的第一个应用程序。我将主要使用 Flask 在 Python 中工作。

我正在考虑实现事件/消息总线来协调服务之间的操作。我打算实现的一些服务是:Auth、Users、Posts 和 Chat。该应用程序有两个实体(“用户”和“组”),几乎每个服务都使用它们。我为每个服务都有一个单独的数据库,每个数据库都有自己的usersgroups来管理特定于该服务的用户/组数据。现在,当我考虑创建新用户之类的事件时,每个服务都需要在表中创建一个新条目users,这就是我考虑使用事件总线的原因。

我阅读了这篇文章,其中讨论了 CQRS 和使用 HTTP (REST) 进行服务之间的外部通信,同时使用事件总线进行内部通信。服务处理 (HTTP) 请求,并发出有关数据更改的事件(例如,通过 Auth 服务创建新用户)。其他服务使用可能触发其他进程(和更多事件)的事件。

问题

我困惑的是如何实际实现(在 Python 中)一个服务,该服务侦听 HTTP 请求以及一组订阅通道中的新事件。我知道您需要使用像 redis/rabbitMQ 这样的工具,但是是否可以在同一进程中处理两种类型的请求,或者您是否需要运行两个服务器(一个用于 REST 请求,另一个用于事件处理)?

另外,如果您对上述一般方法/架构有任何意见,我洗耳恭听。

python rest event-bus microservices

5
推荐指数
1
解决办法
4391
查看次数