首页 > 应用开发 > > 分布式事件驱动架构 WeEvent
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/ ,如需转载,请注明出处,否则将追究法律责任。