IntelliJ插件开发 - 消息

简介

Message Infrastructure
开发IntelliJ平台的插件时,可以使用它提供的消息服务,使用Publish/Subscribe模式实现,可以支持消息的广播消费。
event bus

内置消息

除了自己新建一个Topic给消费者订阅之外,IntelliJ已经内置了许多的Topic,你可以监听它们来得到某个事件发生后的通知,具体的Topic可以去官网查询:https://plugins.jetbrains.com/docs/intellij/extension-point-list.html#intellij-platform-listeners

设计

消息API有3个重要的组件,类似于你用的其他消息服务:

  • Topic : 主题
  • Message Bus : 消息总线
  • Connection : 连接,消费者需要通过Connection才能订阅Topic

使用方法

消息定义

需要创建一个接口,定义消息的Topic以及消息提供哪些事件,事件取决于你的业务,例如你想弄个用户退出登录通知,你可以定义一个方法为afterLogout(User user)。事件方法由发送者显示调用。

public interface ChangeActionNotifier {

  @Topic.ProjectLevel
  Topic<ChangeActionNotifier> CHANGE_ACTION_TOPIC =
      Topic.create("<topic display name>", ChangeActionNotifier.class);

  void beforeAction(Context context);
  void afterAction(Context context);
}
监听消息

消费者需要通过连接消息总线后,才能进行订阅某个Topic动作。一般可以把这个操作放在消费者的构造器中。

project.getMessageBus().connect().subscribe(
    ChangeActionNotifier.CHANGE_ACTION_TOPIC,
    new ChangeActionNotifier() {
        @Override
        public void beforeAction(Context context) {
          // Process 'before action' event.
        }
        @Override
        public void afterAction(Context context) {
          // Process 'after action' event.
        }
});

除了通过硬编码的方式,从project或者application中获取MesssageBus进行消息监听外,还可以通过配置文件plugin.xml中配置的方式:

<idea-plugin>
  <applicationListeners>
    <listener class="" topic=""/>/>
  </applicationListeners>

  <projectListeners>
    <listener class="com.demo.listener.ChangeActionNotifierListner" topic="com.demo.message.ChangeActionNotifier"/>/>
  </projectListeners>
</idea-plugin>
发布消息

发送者通过消息总线进行发送消息的动作,与一些消息中间件不同的是,消息体不是一些内容,而是发送者在合适时机显示调用消息的事件。

public void produceMessage(Context context) {
  ChangeActionNotifier publisher = project.getMessageBus()
      .syncPublisher(ChangeActionNotifier.CHANGE_ACTION_TOPIC);
  publisher.beforeAction(context);
  try {
    // do some your business logic
  } finally {
    publisher.afterAction(context);
  }
}

参考文献

https://plugins.jetbrains.com/docs/intellij/messaging-infrastructure.html#publishing-messages

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值