Zbus Java嵌入启动

galfordliu 发布于 2014/08/11 10:53
阅读 2K+
收藏 0

@少帮主 你好,想跟你请教个问题:

Java

ZBus的消息支持持久吗?

ZBus的嵌入式启动,取不到消息队列。代码如下:

static ZbusServer zbusServer;
    public static void main(String[] args) throws Exception {
        zbusServer=new ZbusServer("127.0.0.1",15555);
        zbusServer.start();
        final RemotingClient client = new RemotingClient("127.0.0.1:15555");
         //2) 包装为生产者,client生命周期不受Producer控制,因此Producer是个轻量级对象
        Producer producer = new Producer(client, "MyMQ");
        Message msg = new Message();
        msg.setBody("hello world");
        producer.send(msg, new ResultCallback() {
            @Override
            public void onCompleted(Message result) {
                System.out.println(result.getBodyString());
            }
        });

}

得到的输出结果为:

2014-08-11 10:52:40 INFO  DispatcherManager:95 - ZbusServerDispachterManager(DispatcherCount=5) started
2014-08-11 10:52:40 INFO  RemotingServer:88 - ZbusServer serving@127.0.0.1 :15555
2014-08-11 10:52:40 INFO  DispatcherManager:95 - org.remoting.ClientDispachterManager(DispatcherCount=5) started
2014-08-11 10:52:40 INFO  ClientEventAdaptor:53 - Connected: Session [id=b4ca06fa-92c7-4266-b87e-892e8089e424, status=CONNECTED, registeredKey=sun.nio.ch.SelectionKeyImpl@56bc57, attributes=null, lastOperationTime=1407725560413, readBuffer=null, writeBufferQ=[], connectLatch=java.util.concurrent.CountDownLatch@e91522d[Count = 0], channel=java.nio.channels.SocketChannel[connected local=/127.0.0.1:5510 remote=/127.0.0.1:15555]]
发送消息结果:MQ(MyMQ) Not Found


提示MyMQ队列没找到。请教下是否代码有误。

另外,ZbusServer不提供close方法,嵌入式时想关闭server怎么做?


加载中
0
少帮主
少帮主

1)呵呵,首先ZbusServer里面大量大对象与网络链接,作为嵌入式的方式不断的启动释放是不合理的,应该作为一个基础设施服务。

2)上面的代码问题,提示是明确的,消息队列(MyMQ)不存在,原因是你没有去创建一个消息队列,Consumer中提供Register消息队列操作。所以你得先创建消息队列

3)zbus的消息队列没有做持久化

0
少帮主
少帮主

引用来自“少帮主”的评论

1)呵呵,首先ZbusServer里面大量大对象与网络链接,作为嵌入式的方式不断的启动释放是不合理的,应该作为一个基础设施服务。

2)上面的代码问题,提示是明确的,消息队列(MyMQ)不存在,原因是你没有去创建一个消息队列,Consumer中提供Register消息队列操作。所以你得先创建消息队列

3)zbus的消息队列没有做持久化

如果真想做嵌入式,zbusserver close方法我加上,这个很简单
0
少帮主
少帮主
在Producer类中有这个注册方法
public boolean register(String registerToken) throws IOException {
if(registerToken == null){
registerToken = "";
}

Map<String, String> params = new HashMap<String, String>();
params.put("mq_name", mq);
params.put("access_token", accessToken);
params.put("mq_mode", ""+this.mode);
Message req = Proto.buildAdminMessage(registerToken, Proto.CreateMQ,params);
Message res = client.invokeSync(req);
if (res == null) return false;
return res.isStatus200();
}
杜太神
杜太神
帮主,新代码中Producer类已经没有这个方法了呢?
0
galfordliu
galfordliu

哦,谢谢您的答复。

另外,如何设置消息的优先级呢?有没有文档之类的手册?

我想Zbus是轻量级消息队列服务,而且也能实现嵌入式启动,那就更加完善一点吧。毕竟业务需求是多变的。

0
少帮主
少帮主

引用来自“少帮主”的评论

在Producer类中有这个注册方法
public boolean register(String registerToken) throws IOException {
if(registerToken == null){
registerToken = "";
}

Map<String, String> params = new HashMap<String, String>();
params.put("mq_name", mq);
params.put("access_token", accessToken);
params.put("mq_mode", ""+this.mode);
Message req = Proto.buildAdminMessage(registerToken, Proto.CreateMQ,params);
Message res = client.invokeSync(req);
if (res == null) return false;
return res.isStatus200();
}

非常不好意思,没兼容到之前的版本

我加回来吧

iehyou
iehyou
回复 @少帮主 : 感谢开源 我关注学习下。
少帮主
少帮主
我们就从zeromq和activemq转过来自己捣鼓的
iehyou
iehyou
这个是否可以替代activemq ? 原来用activemq 做过一个主从同步的,也被坑了几次,虽然现在基本解决了
0
苏文
苏文
@少帮主 您好,最近在为项目做准备和调研,不知道您有没有给zbus写配置文档的计划呢?现在按照那个简单的文档可以跑个小例子,但是具体的HA怎么配置呢?
返回顶部
顶部