有人试图使用MessagePackAndroid应用吗?
可能吗?我试图使用Jar msgpack-java并收到以下异常:
Caused by: java.lang.ExceptionInInitializerError
at org.msgpack.Packer.pack(Packer.java:532)
at org.msgpack.MessagePack.pack(MessagePack.java:31)
... 15 more
Caused by: java.lang.ExceptionInInitializerError
at org.msgpack.template.TemplateRegistry.<clinit>(TemplateRegistry.java:38)
... 17 more
Caused by: java.lang.VerifyError: org.msgpack.template.BeansFieldEntryReader
at org.msgpack.template.builder.BeansTemplateBuilder.<init (BeansTemplateBuilder.java:42)
at org.msgpack.template.builder.BuilderSelectorRegistry.initForJava(BuilderSelectorRegistry.java:73)
at org.msgpack.template.builder.BuilderSelectorRegistry.<clinit>(BuilderSelectorRegistry.java:38)
... 18 more
Run Code Online (Sandbox Code Playgroud)
我使用的代码非常简单
PrintWriter out = new PrintWriter(socket.getOutputStream());
Message msg = new Message();
msg.body = "asdasdasd";
msg.from = "qwe";
msg.to = "ttt";
byte[] bytes = MessagePack.pack(msg);
out.print(bytes);
out.flush();
Run Code Online (Sandbox Code Playgroud)
我有javassist.jar,msgpack-0.5.2.jar,slf4j-api-1.6.2.jar和slf4j-jdk14-1.6.2.jar在我的lib目录中.
在我的服务器应用程序中,此代码可以使用相同的库.
我在Redis中存储MessagePacked哈希时遇到问题.我在下面粘贴了一个测试用例.从Redis中提取打包数据并解压缩时,哈希略有损坏.这似乎发生在哈希值超出一定长度时,尽管我不能肯定地说.
我使用的是Redis 2.4.17(默认配置),Ruby 1.9.3p194,MessagePack 0.4.7和Redis gem 3.0.2.使用节点会发生同样的问题,所以我假设问题出在MessagePack或Redis中.有任何想法吗?
require 'redis'
require 'msgpack'
class Test
def self.run(url)
redis = Redis.new
data = {'number' => 13498935756, 'hash' => {'url' => url}}
redis.set('my_key', MessagePack.pack(data))
result = MessagePack.unpack(redis.get('my_key'))
puts result
puts result['hash']['url'] == data['hash']['url']
end
end
Test.run('http://fake.example.com') # works
=> {"number"=>13498935756, "hash"=>{"url"=>"http://fake.example.com"}}
=> true
Test.run('http://fakeurl.example.com') # does not work
=> {"number"=>13498935756, "hash"=>{"url"=>"ttp://fakeurl.example.com"}}
=> false
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用代码中的记录器从 Django 项目设置 Fluentd 日志处理程序:
def get_fluentd_logger(name):
import logging
from fluent import handler
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(name)
logger.addHandler(handler.FluentHandler(name, host='localhost', port=24224))
return logger
Run Code Online (Sandbox Code Playgroud)
handler.FluentHandler来自包fluent-logger,我在本地运行fluent。
流利的.conf:
<source>
type forward
port 24224
</source>
<match **>
type copy
<store>
type stdout
</store>
<store>
type forward
send_timeout 60s
recover_wait 10s
heartbeat_interval 1s
phi_threshold 8
hard_timeout 60s
<server>
name monitoring
host 1.2.3.4
port 24224
weight 100
</server>
</store>
</match>
Run Code Online (Sandbox Code Playgroud)
当我从非 django python 项目运行它时,它工作正常,但是当从 django 调用时,它不执行任何操作。
问题是:有没有办法查看当前安装的记录器及其处理程序,以便我可以调试这种情况?
[编辑]
当从 django 设置完成时,如下所示:
LOGGING …Run Code Online (Sandbox Code Playgroud) 在着眼于C API为MessagePack,有多个功能以适当地串行化(包)中的数据,根据类型:msgpack_pack_uint8,msgpack_pack_int32,...
在API中似乎没有相应的调用来解压缩数据. msgpack_unpack_next返回一个msgpack_object.这些对象仅具有粗粒度类型(类型中最大的:int64,double,...),基于所包含的枚举.
我在这里错过了什么吗?是期望使用粗物体然后再施放?
如何正确拆包?
此外,有没有好的文档或用法示例?网站上的那些是微不足道的.