ITPub博客

首页 > 应用开发 > > 分布式事件驱动架构 WeEvent

分布式事件驱动架构 WeEvent

作者:supergirlxu 时间:2019-10-15 09:24:31 0 删除 编辑

WeEvent是一套分布式事件驱动架构,实现了可信、可靠、高效的跨机构、跨平台事件通知机制。


WeEvent由微众银行自主研发并完全开源,秉承分布式商业模式中对等合作、智能协同、价值共享的设计理念,致力于提升机构间合作效率,降低合作成本,同时打通应用程序、物联网、云服务和私有服务等不同平台,最终在不改变已有商业系统的开发语言、接入协议的情况下,做到跨机构、跨平台的事件通知与处理。更多内容详见WeEvent官网 。

特性

Broker服务:提供事件主题的CRUD管理,事件发布订阅Publish/Subscribe等功能;

适配多协议:支持RESTful、JsonRPC、STMOP、MQTT等多种接入协议;

SDK及Demo:提供一个符合Java JMS规范JAR包,以及各种接入协议的代码样例;

高可用性:通过集群的负载均衡和服务主备切换实现高可用;

事件治理:通过Web管理台可以管理事件主题,可以查看区块链FISCO-BCOS节点、主题订阅等信息;

快速入门

依赖安装

在体验WeEvent之前,用户需提前搭建好区块链,WeEvent现已支持FISCO-BCOS区块链底层平台,具体操作见FISCO-BCOS文档。

服务搭建

快速搭建一套WeEvent服务,请参考快速安装文档。

功能体验

通过浏览器就可以体验事件发布等基本功能,如发布事件。 更多功能,请参见WeEvent接入样例。

DEMO:

import java.nio.charset.StandardCharsets;

import javax.jms.BytesMessage;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageListener;

import javax.jms.Session;

import javax.jms.Topic;

import javax.jms.TopicConnection;

import javax.jms.TopicConnectionFactory;

import javax.jms.TopicPublisher;

import javax.jms.TopicSession;

import javax.jms.TopicSubscriber;

import com.webank.weevent.sdk.WeEvent;

import com.webank.weevent.sdk.jms.WeEventConnectionFactory;

import com.webank.weevent.sdk.jms.WeEventTopic;

/**

* Samples of JMS interface.

*

* @author matthewliu

* @since 2019/04/08

*/

public class JMS {

private final static String topicName = "com.weevent.test";

private static void publish() throws JMSException {

// get topic connection

TopicConnectionFactory connectionFactory = new WeEventConnectionFactory(WeEventConnectionFactory.defaultBrokerUrl);

TopicConnection connection = connectionFactory.createTopicConnection();

// start connection

connection.start();

// create session

TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

// create topic

Topic topic = session.createTopic(topicName);

// create publisher

TopicPublisher publisher = session.createPublisher(topic);

for (int i = 0; i < 10; i++) {

// send message

BytesMessage msg = session.createBytesMessage();

msg.writeBytes(("hello weevent: " + i).getBytes(StandardCharsets.UTF_8));

publisher.send(msg);

}

System.out.print("send done.");

connection.close();

}

private static void subscribe() throws JMSException {

// get topic connection

TopicConnectionFactory connectionFactory = new WeEventConnectionFactory(WeEventConnectionFactory.defaultBrokerUrl);

TopicConnection connection = connectionFactory.createTopicConnection();

// start connection

connection.start();

// create session

TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

// create topic

Topic topic = session.createTopic(topicName);

// optional, default is OFFSET_LAST

((WeEventTopic) topic).setOffset(WeEvent.OFFSET_LAST);

// create subscriber

TopicSubscriber subscriber = session.createSubscriber(topic);

// create listener

subscriber.setMessageListener(new MessageListener() {

public void onMessage(Message message) {

BytesMessage msg = (BytesMessage) message;

try {

byte[] data = new byte[(int) msg.getBodyLength()];

msg.readBytes(data);

System.out.println("received: " + new String(data, StandardCharsets.UTF_8));

} catch (JMSException e) {

e.printStackTrace();

}

}

});

connection.close();

}

public static void main(String[] args) {

System.out.println("This is WeEvent JMS sample.");

try {

subscribe();

publish();

} catch (JMSException e) {

e.printStackTrace();

}

}

}

SKD接入

package com.webank.weevent.sample;

import java.nio.charset.StandardCharsets;

import com.webank.weevent.sdk.BrokerException;

import com.webank.weevent.sdk.WeEvent;

import com.webank.weevent.sdk.WeEventClient;

/**

* Sample of Java SDK.

*

* @author matthewliu

* @since 2019/04/07

*/

public class JavaSDK {

private final static String topicName = "com.weevent.test";

public static void main(String[] args) {

System.out.println("This is WeEvent Java SDK sample.");

try {

// get client

WeEventClient client = new WeEventClient("http://localhost:8080/weevent");

// ensure topic exist

client.open(topicName);

// subscribe topic

String subscriptionId = client.subscribe(topicName, WeEvent.OFFSET_LAST, new WeEventClient.EventListener() {

@Override

public void onEvent(WeEvent event) {

System.out.println("received event: " + event.toString());

}

@Override

public void onException(Throwable e) {

}

});

// publish event

for (int i = 0; i < 10; i++) {

client.publish(topicName, ("hello weevent: " + i).getBytes(StandardCharsets.UTF_8));

}

// unSubscribe topic

client.unSubscribe(subscriptionId);

} catch (BrokerException e) {

e.printStackTrace();

}

}

}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/644/viewspace-3153936/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    220
  • 访问量
    1690