unity3d 中的 Kafka 集成抛出 Win32Exception 错误 [英] Kafka integration in unity3d throwing Win32Exception error
问题描述
我正在尝试在统一环境中运行 Kafka 的代码示例,因此,我创建了一个 消费者 客户端(代码如下).
I am trying to run a code sample of Kafka in unity environment and for this reason, I created a consumer client (Code given below).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Confluent.Kafka;
using Confluent.Kafka.Serialization;
using System.Text;
public class KafkaConsumer : MonoBehaviour
{
// Use this for initialization
void Start ()
{
/*
* The consumer application will then pick the messages from the same topic and write them to console output.
* The process to create the consumer application is also very simple.
*/
var config = new Dictionary<string, object>
{
{ "group.id","JavaInUseGroup" },
{ "bootstrap.servers", "localhost:9092" },
{ "enable.auto.commit", "false" }
};
using (var consumer = new Consumer<Null, string>(config, null, new StringDeserializer(Encoding.UTF8)))
{
consumer.Subscribe(new string[] { "javainuse-topic" });
consumer.OnMessage += (_, msg) =>
{
//Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset :{msg.Offset} {msg.Value}");
Debug.Log($"Topic: {msg.Topic} Partition: {msg.Partition} Offset :{msg.Offset} {msg.Value}");
consumer.CommitAsync(msg);
};
while (true)
{
consumer.Poll(100);
}
}
}
}
为了执行上面的代码示例,我还在我的项目资产文件夹中添加了 confluent.Kafka dll
.但是每当我运行我的统一游戏时,它都会抛出一个error:Win32Exception:找不到指定的模块.
In order to execute the above code sample I have also added confluent.Kafka dll
into my project asset folder. but whenever I run my unity game it throws an error:Win32Exception: The specified module could not be found.
作为 InvalidOperationException 重新抛出:加载时出错librdkafka.dll 或其依赖项来自 Assets/librdkafka.dll.查看该目录存在,如果不存在,请检查您的部署过程.你可以还可以在任何调用之前自行加载库及其依赖项到 Confluent.Kafka Confluent.Kafka.Impl.LibRdKafka.Initialize(System.String userSpecifiedPath)(在<700d5bbe3b974ce5aed001c82b789f6a>:0) Confluent.Kafka.Consumer..ctor(System.Collections.Generic.IEnumerable1[T] 配置)(在<700d5bbe3b974ce5aed001c82b789f6a>:0)Confluent.Kafka.Consumer
2[TKey,TValue]..ctor(System.Collections.Generic.IEnumerable1[T] 配置,Confluent.Kafka.Serialization.IDeserializer
1[T] keyDeserializer,Confluent.Kafka.Serialization.IDeserializer`1[T] valueDeserializer)(at <700d5bbe3b974ce5aed001c82b789f6a>:0) KafkaConsumer.Start() (at资产/KafkaConsumer.cs:26)
Rethrow as InvalidOperationException: Error while loading librdkafka.dll or its dependencies from Assets/librdkafka.dll. Check the directory exists, if not check your deployment process. You can also load the library and its dependencies by yourself before any call to Confluent.Kafka Confluent.Kafka.Impl.LibRdKafka.Initialize (System.String userSpecifiedPath) (at <700d5bbe3b974ce5aed001c82b789f6a>:0) Confluent.Kafka.Consumer..ctor (System.Collections.Generic.IEnumerable
1[T] config) (at <700d5bbe3b974ce5aed001c82b789f6a>:0) Confluent.Kafka.Consumer
2[TKey,TValue]..ctor (System.Collections.Generic.IEnumerable1[T] config, Confluent.Kafka.Serialization.IDeserializer
1[T] keyDeserializer, Confluent.Kafka.Serialization.IDeserializer`1[T] valueDeserializer) (at <700d5bbe3b974ce5aed001c82b789f6a>:0) KafkaConsumer.Start () (at Assets/KafkaConsumer.cs:26)
由于错误指出存在依赖问题,所以我也在 assets/librdkafka/x64 文件夹中复制了这些 dll
As the error states that there is dependancy problem so i have also copied these dll in assets/librdkafka/x64 folder
- librdkafka
librdkafkacpp
- librdkafka
librdkafkacpp
msvcr120
现在的问题是,每当我尝试播放时,我的项目都会卡住.
Now the problem is, my project get stuck whenever i try to play it.
记住:我已经在 vs 2017 中通过 nuget 下载了所有这些 dll.然后我将这些 dll 统一起来.
推荐答案
对于未来的用户,以下是在您的 Unity3d 项目中添加 Kafka 的过程:实际上,在您的项目中添加 dll 有特定的顺序或文件夹层次结构.(我没有找到任何权威参考,如果有人找到了请分享)
For future user, here is the process to add Kafka in your Unity3d Project: Actually there is a specific order or folder hierarchy to add dll in your project. (I didn't find any authoritative reference about this if someone found then please share)
- 首先将 Confluen.Kafka dll 粘贴到任何文件夹中
- 然后制作 librdkafka 文件夹(确保它在 confluent.kafka dll 旁边创建)并将与平台相关的 dll 粘贴到 x64 或 x86 文件夹中
现在,您可以运行我的代码示例(在问题中提到).
Now, you can run my code sample(mentioned in question).
IMP 注意: 构建播放器后,您必须手动复制 Player/Managed/librdkafka 文件夹中的 dll 文件.您必须在托管文件夹中创建 librdkafka 文件夹,然后粘贴您的 dll.(同样,我不知道为什么需要它,但如果有人找到权威参考然后分享)
IMP NOTE: After building the player, you have to manually copy the dll files in your Player/Managed/librdkafka folder. You have to create librdkafka folder in managed folder, then paste your dlls.(Again i don't know why it require but if someone found authoritative refrence then share)
这篇关于unity3d 中的 Kafka 集成抛出 Win32Exception 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!