C# unity3d中的Kafka集成引发Win32Exception错误

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; 使用系统文本; 公共类卡夫卡消费者:单一行为 { //用于初始化 无效开始() { /* *然后消费者应用程序将从同一主题中选取消息并将其写入控制台输出。 *创建消费者应用程序的过程也非常简单。 */

我试图在unity环境中运行Kafka的代码示例,因此,我创建了一个consumer客户端(下面给出了代码)

使用系统集合;
使用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.IEnumerable
1[T]config)(位于
:0)
Confluent.Kafka.Consumer
2[TKey,TValue]…ctor (System.Collections.Generic.IEnumerable
1[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文件夹中

  • 卡夫卡
  • 利伯卡夫卡普

  • msvcr120

  • 兹利布
  • 现在的问题是,每当我尝试播放时,我的项目都会被卡住


    记住:我在VS2017中通过nuget下载了所有这些dll。然后我将这些dll引入unity。

    对于未来的用户,以下是在Unity3d项目中添加Kafka的过程: 实际上,在项目中添加dll有一个特定的顺序或文件夹层次结构。(我没有找到任何权威参考,如果有人找到了,请分享)

  • 首先将Confluen.Kafka dll粘贴到任何文件夹中
  • 然后创建librdkafka文件夹(确保它是在confluent.kafka dll旁边创建的),并将与平台相关的dll粘贴到x64或x86文件夹中
  • 现在,您可以运行我的代码示例(在问题中提到)

    导入注意:构建播放器后,必须手动复制播放器/Managed/librdkafka文件夹中的dll文件。您必须在托管文件夹中创建librdkafka文件夹,然后粘贴您的DLL。(我也不知道为什么需要,但如果有人找到权威引用,请共享)

    如果查看源:,confluent.kafka将动态加载librdkafka,这些DLL:

  • libeay32.dll
  • librdkafka.dll
  • librdkafkacpp.dll
  • libzstd.dll
  • msvcp120.dll
  • msvcr120.dll
  • ssleay32.dll
  • zlib.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