1.定义一个ResourceManager ,服务启动时进行初始化
package com.geekplus.test;
import io.vertx.core.Vertx;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.json.JsonObject;
public class ResourceManager {
private static EventBus eb = null;
// 推送消息
public final static String MSG_EVENT_SEND = "msg_event_send";
public static void init(Vertx vertx) {
try {
// TODO 需要初始化的
eb = vertx.eventBus();
eb.<JsonObject> consumer(ResourceManager.MSG_EVENT_SEND, msg -> {
JsonObject data = msg.body();
String a1 = data.getString("XXX");
Integer b2 = data.getInteger("ZZZ");
String c3 = data.getString("YYY");
doSomeMethod(a1, b2, c3);
});
} catch (Exception e) {
throw e;
}
}
private static void doSomeMethod(String a1, Integer b2, String c3) {
// TODO Auto-generated method stub
}
}
2.在Servlet中初始化ResourceManager 资源类
package com.geekplus.test;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.eventbus.EventBus;
public class TestServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private final static Vertx vertx;
static {
VertxOptions options = new VertxOptions();
//最大执行时间10S,超过10s,讲触发警告
options.setMaxEventLoopExecuteTime(10000000000L);
vertx = Vertx.vertx(options);
}
public static Vertx messageChannel() {
return TestServlet.vertx;
}
public static EventBus eventBus() {
return vertx.eventBus();
}
@Override
public void init() throws ServletException {
ResourceManager.init(vertx);
}
}
3.当有某个特定任务执行时,需要创建事件去通知前端,推送消息
package com.geekplus.test;
import io.vertx.core.Vertx;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.json.JsonObject;
public class MethodTest {
public void test01 () {
// TODO 某个特定任务触发了,创建事件
String value = "现在是十点整";
createMsgEvent(value);
}
private void createMsgEvent(String value) {
// 增加一个配料不足待配料的消息事件
Vertx vert = TestServlet.messageChannel();
EventBus eb = vert.eventBus();
JsonObject param = new JsonObject();
param.put("pullServiceMsg", value);
eb.<JsonObject>send(ResourceManager.MSG_EVENT_SEND, param, message -> {
if (message.succeeded()) {
JsonObject result = message.result().body();
if (result != null) {
// TODO do something
}
}
});
}
}
4.向前端推送消息事件
package com.geekplus.test;
import com.weibo.api.motan.transport.Server;
import io.vertx.core.Handler;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.JsonObject;
public class EventTest {
// 服务
private Server server;
private EventBus eb;// 事件总线
// 入口方法
public void start() {
eb.<JsonObject>consumer(ResourceManager.MSG_EVENT_SEND, executeEventMsg);
}
// 向前端推送消息事件
private Handler<Message<JsonObject>> executeEventMsg = message -> {
JsonObject params = message.body();
String pullServiceMsg = params.getString("pullServiceMsg");
EventResponseMsg msg = new EventResponseMsg();
msg.setCode(0);
msg.setMsg("发送配料上架操作中信息成功!");
msg.setTask(pullServiceMsg);
Boolean flag = false;
try {
flag = server.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
};
}