标签: event-bus

Akka EventBus for Java的示例

需要一些关于如何在Java中使用Akka提供的EventBus的建议(而不是Scala!).网站上的文档似乎不完整:http://doc.akka.io/docs/akka/2.0.1/java/event-bus.html

据我所知,应该创建actor以对特定消息做出反应,例如:

final ActorSystem actorSystem = ActorSystem.create("ServerEvents");
final ActorRef actor = actorSystem.actorOf(new Props(SeverEventHandler.class));
actorSystem.eventStream().subscribe(actor,ServerMessage.class);
Run Code Online (Sandbox Code Playgroud)

但现在还不清楚如何向事件总线发送消息.

有人可以分享一些好的教程/示例/等?

java akka event-bus

7
推荐指数
1
解决办法
4699
查看次数

注入Otto事件总线而不是使用静态单例的优点

在我的Android应用程序中,我使用Otto作为事件总线,使用Dagger进行依赖注入.

在Otto的用户指南和许多博客文章中,建议使用注入来获取总线单例.我已经做了一段时间,但最近我更加怀疑如果注入总线比使用简单的静态单例有任何优势.

使用注入时,我必须注入我希望能够在总线上发布UI事件的每个自​​定义View或ViewHolder.尤其是匕首,在我需要公共汽车的地方注入每个班级似乎有点笨拙.当然,我可以通过构造函数或setter方法传递总线,但是如果您考虑具有许多不同视图类型的适配器,那也可能有点笨拙.

我注意到注入总线没有任何好处.在Otto的情况下,注入了一个具体的实现(Bus的一个实例),并且永远不会改变.由于订阅的工作方式,包装Otto进行解耦对于思考是没有任何意义的.

那么,有没有人看到注入奥托的任何优点,我没有看到?

android dependency-injection event-bus otto dagger

7
推荐指数
1
解决办法
1569
查看次数

vertx 上的最佳实践设计。存储库的 Eventbus 或 Singleton

我正在使用 vertx3

我需要使用 redis 来设置和获取值。(Redis 将来可能会更改为其他内容)

我正在为我的实现寻找最佳实践设计。

我正在研究 vertx 集群,我需要通过 eventbus 检索消息提取消息并插入到 Redis 中。

另一方面,我可以通过网络获取请求,也可以提取消息并将它们插入到 redis 中

两种选择:

  1. 我是否应该有一个“redis-verticle”来通过总线获取消息并写入它们。

  2. 我应该创建一个“侦听器垂直”来保存 DAO,它将保存将写入它们的 RedisRepo 对象。

    我也将能够处理网络调用并持有这个 DAO 对象

如果我在 spring-app 上,我会创建一个包含 RedisRepo 的 DAO 并将其注入我的服务层,但在这里我们得到了 eventbus,所以我不确定。

(顺便说一下,redis 数据源我被改成了别的东西,所以我得考虑通用包装器)

1. 

public class RedisRepoVerticle extends AbstractVerticle {

...
 public void start() {
 client = new RedisClient("localhost", 6379);
                 connection = client.connect();
...

vertx.eventBus().consumer("redis-operation", (handler) -> {
            {
                JsonObject msg = new JsonObject(handler.body().toString());
               //write straight to Redis 

            }
        });

}






2. 

     public class RedisMessageListener extends AbstractVerticle …
Run Code Online (Sandbox Code Playgroud)

java architecture event-bus vert.x

7
推荐指数
1
解决办法
6205
查看次数

Greenbot Eventbus 3.0:onEvent,onEventMainThread,onEventBackgroundThread和onEventAsync有什么区别?

我有点混淆的使用onEvent,onEventMainThread,onEventBackgroundThreadonEventAsyncGreenrobot的EventBus 3.0

从我在文档中看到的:

  • onEventThreadMode.POSTING(默认)一起使用
  • onEventMainThread 与...一起使用 ThreadMode.MAIN
  • onEventBackgroundThread 与...一起使用 ThreadMode.BackgroundThread
  • onEventAsync 与...一起使用 ThreadMode.ASYNC

但是在事件从后台线程发布的情况下:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MyEvent event) {
    // some UI manipulation
}
Run Code Online (Sandbox Code Playgroud)

具有与以下完全相同的行为:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(MyEvent event) {
    // some UI manipulation
}
Run Code Online (Sandbox Code Playgroud)

和:

@Subscribe
public void onEventMainThread(MyEvent event) {
    // some UI manipulation
}
Run Code Online (Sandbox Code Playgroud)

抛出,CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch …

java android event-bus greenrobot-eventbus greenrobot-eventbus-3.0

7
推荐指数
2
解决办法
4320
查看次数

如何使用EventBus使用Call Type

Activity/Fragment当我从服务器得到响应时,我正在使用EventBus通知.到目前为止一切都运行良好,但是当我在同一个Fragment或两个网络中使用两个网络呼叫时会出现问题Activity.问题是onEvent(String response)从服务器获取两个响应的相同方法.反应call 1不同于call 2.

我提出了一个解决方案 - 我添加CallTypeNetworkReqest但我无法通知活动/片段有关网络调用,因为post()只需要一个参数.

这是相关的代码 -

public class NetworkRequest {
    EventBus eventBus = EventBus.getDefault();

    public void stringParamRequest(String url, final Map<String, String> params,String callType) {
        StringRequest jsonObjRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        eventBus.post(response);
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("volley", "Error: " + error.getMessage());
                eventBus.post(error);
            }
        }) { …
Run Code Online (Sandbox Code Playgroud)

android web-services event-bus android-fragments

7
推荐指数
1
解决办法
523
查看次数

使用Vert.x事件总线'本地'(java,单jvm)时是否可以避免序列化?

我的情况是:

  • 单个JVM
  • 仅限Java(我不需要是多语言)
  • 我不想支付序列化成本来在总线上发布不可变事件(发布对java对象的引用会起作用).

我理解vert.x事件总线的范围比我的用例要广泛得多.

我想到了一个类似于akka的行为:当你分发时,你必须为你的消息提供序列化,如果你保持本地引用被传递.

有没有什么可以让我在Vert.x中做到这一点?

java event-bus vert.x

7
推荐指数
1
解决办法
534
查看次数

从VueJS组件发出重复事件

当我的鼠标光标进入并离开我的VueJS组件时,分别调用以下方法.

光标进入和离开组件时调用的方法:

// located in "methods" section of my Vue component file

onMouseEnter() {
    window.Event.$emit("mouse-entered", this.index);
    console.log("Mouse entered");
},
onMouseLeave() {
    window.Event.$emit("mouse-left", this.index);
    console.log("Mouse left");
},
Run Code Online (Sandbox Code Playgroud)

预计,当我的光标进入并离开组件时,这就是我的控制台的样子(每次发出一个事件):

在此输入图像描述

然而,真正奇怪的是,在Vue开发工具中,我看到每次光标进入并离开组件时都会发出重复事件:

在此输入图像描述

鉴于这种相互矛盾的信息,我不确定该相信什么.刷新页面有时会消除开发工具中的重复事件,但我总是在我的控制台中获得单个唯一的事件,这是我想要的行为.

有谁知道这里发生了什么,我应该接受什么作为真相的来源?

下面是我的main.js文件中声明和初始化我的Vue实例的方法:

// As far as I can tell, duplicated Vue instances are not being created here on page refresh

let app;

// global event bus
window.Event = new Vue();
console.log("Event bus created");

/* This section ensures the firebase auth object isn't in …
Run Code Online (Sandbox Code Playgroud)

javascript event-bus vue.js vuejs2 vue-devtools

7
推荐指数
1
解决办法
1776
查看次数

将 EventBus 与 ViewPager 一起使用时,有时会出现“已添加片段”

单击按钮后,我正在使用 EventBus 从一个片段导航到另一个片段。有时且不可重现,会出现以下错误:

Fatal Exception: java.lang.IllegalStateException: Fragment already added: FragmentQuestion3_2{82d0763} (e57d5f9c-c80b-4f99-a4f4-e844bdabdef5) id=0x7f0a0487}
       at androidx.fragment.app.FragmentStore.addFragment(FragmentStore.java:67)
       at androidx.fragment.app.FragmentManager.addFragment(FragmentManager.java:1563)
       at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:405)
       at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
       at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:216)
       at android.app.ActivityThread.main(ActivityThread.java:7211)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
Run Code Online (Sandbox Code Playgroud)

这个问题有一些答案,但自从我使用 EventBus 以来,对我没有任何帮助。

这是显然已经添加的片段:

public class FragmentQuestion3_2 extends BaseFragment {

    private ViewModelQuestionAnswer viewModel;
    private String category;
    private ImageView imageCategory;
    private TextView question3;

    PagerAdapter viewPagerAdapter;
    public NonSwipeAbleViewPager optionAnswerViewPager;

    private boolean isFragmentLoaded = false;

    public FragmentQuestion3_2() {
        // Required empty …
Run Code Online (Sandbox Code Playgroud)

java android event-bus android-fragments

7
推荐指数
1
解决办法
783
查看次数

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

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

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

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
查看次数

是否可以将 REST 和消息传递结合用于微服务?

我们拥有基于微服务架构的应用程序的第一个版本。我们使用 REST 进行外部和内部通信。

现在我们要从CP(CAP定理)*切换到AP,使用消息总线进行微服务之间的通信。关于如何基于 Kafka、RabbitMQ 等创建事件总线的信息有很多,但我找不到任何 REST 和消息传递组合的最佳实践。例如,您创建了一个汽车服务,您需要添加不同的汽车组件。为此,将 REST 与 POST 请求一起使用会更有意义。另一方面,预订汽车的服务对于基于事件的方法来说是一项很好的任务。

当您拥有不同的字典和业务逻辑功能时,您是否有类似的方法?你如何结合它们?只是分别支持这两种方法?或者用一种方法统一它们?

* 对于第一个版本,我们同意选择一致性和分区容错性。但是现在可用性对我们来说变得更加重要。

rest messagebroker event-bus cap-theorem microservices

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