C# unity3d中的Kafka集成引发Win32Exception错误
我试图在unity环境中运行Kafka的代码示例,因此,我创建了一个consumer客户端(下面给出了代码)C# unity3d中的Kafka集成引发Win32Exception错误,c#,unity3d,apache-kafka,kafka-consumer-api,confluent-platform,C#,Unity3d,Apache Kafka,Kafka Consumer Api,Confluent Platform,我试图在unity环境中运行Kafka的代码示例,因此,我创建了一个consumer客户端(下面给出了代码) 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用合流卡夫卡; 使用Confluent.Kafka.Serialization; 使用系统文本; 公共类卡夫卡消费者:单一行为 { //用于初始化 无效开始() { /* *然后消费者应用程序将从同一主题中选取消息并将其写入控制台输出。 *创建消费者应用程序的过程也非常简单。 */
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用合流卡夫卡;
使用Confluent.Kafka.Serialization;
使用系统文本;
公共类卡夫卡消费者:单一行为
{
//用于初始化
无效开始()
{
/*
*然后消费者应用程序将从同一主题中选取消息并将其写入控制台输出。
*创建消费者应用程序的过程也非常简单。
*/
var config=新字典
{
{“group.id”,“JavaInUseGroup”},
{“bootstrap.servers”,“localhost:9092”},
{“enable.auto.commit”,“false”}
};
使用(var consumer=newconsumer(config,null,newstringdeserializer(Encoding.UTF8)))
{
Subscribe(新字符串[]{“javainuse topic”});
consumer.OnMessage+=(uz,msg)=>
{
//Console.WriteLine($“主题:{msg.Topic}分区:{msg.Partition}偏移量:{msg.Offset}{msg.Value}”);
Debug.Log($“主题:{msg.Topic}分区:{msg.Partition}偏移量:{msg.Offset}{msg.Value}”);
consumer.CommitAsync(msg);
};
while(true)
{
消费者调查(100);
}
}
}
}
为了执行上面的代码示例,我还将confluent.Kafka dll
添加到我的项目资产文件夹中。但每当我运行unity游戏时,它都会抛出一个错误:Win32Exception:找不到指定的模块
作为InvalidOperationException重新刷新:加载时出错
librdkafka.dll或其从资产/librdkafka.dll的依赖项。检查
目录存在,如果不存在,请检查部署过程。你可以
在任何调用之前,您自己也可以加载库及其依赖项
汇合。卡夫卡汇合。卡夫卡。Impl.LibRdKafka.Initialize
(System.String userSpecifiedPath)(位于
:0)合流。卡夫卡。消费者..消费者
(System.Collections.Generic.IEnumerable1[T]config)(位于
:0)
Confluent.Kafka.Consumer
2[TKey,TValue]…ctor
(System.Collections.Generic.IEnumerable1[T]配置,
Confluent.Kafka.Serialization.IDeserializer
1[T]键反序列化器,
Confluent.Kafka.Serialization.IDeserializer`1[T]valueDeserializer)
(at:0)KafkaConsumer.Start()(at
资产/卡夫卡消费品(cs:26)
由于错误表明存在依赖性问题,因此我还将这些dll复制到assets/librdkafka/x64文件夹中
记住:我在VS2017中通过nuget下载了所有这些dll。然后我将这些dll引入unity。对于未来的用户,以下是在Unity3d项目中添加Kafka的过程: 实际上,在项目中添加dll有一个特定的顺序或文件夹层次结构。(我没有找到任何权威参考,如果有人找到了,请分享)
Confluent.Kafka.dll
所在的同一文件夹中,或者创建一个librdkafka文件夹,如下所示:
\---librdkafka
+---x64
| libeay32.dll
| librdkafka.dll
| librdkafkacpp.dll
| libzstd.dll
| msvcp120.dll
| msvcr120.dll
| ssleay32.dll
| zlib.dll
|
\---x86
libeay32.dll
librdkafka.dll
librdkafkacpp.dll
libzstd.dll
msvcp120.dll
msvcr120.dll
ssleay32.dll
zlib.dll
实际上,我无法想象Unity3d应用程序需要卡夫卡客户端的情况。您是否正在尝试创建移动(pc、xbox等)客户端,直接向Kafka broker发送一些数据?
\---librdkafka
+---x64
| libeay32.dll
| librdkafka.dll
| librdkafkacpp.dll
| libzstd.dll
| msvcp120.dll
| msvcr120.dll
| ssleay32.dll
| zlib.dll
|
\---x86
libeay32.dll
librdkafka.dll
librdkafkacpp.dll
libzstd.dll
msvcp120.dll
msvcr120.dll
ssleay32.dll
zlib.dll