Интеграция Кафки в Unity3D бросая ошибку Win32Exception - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь запустить пример кода Kafka в среде с поддержкой Unity, и по этой причине я создал потребитель клиент (код приведен ниже).

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 в папку с активами моего проекта.но всякий раз, когда я запускаю мою игру «Unity», она выдает ошибку : Win32Exception : указанный модуль не может быть найден.

Rethrow as InvalidOperationException: Ошибка при загрузке librdkafka.dll или его зависимостейиз активов / librdkafka.dll.Убедитесь, что каталог существует, если нет, проверьте процесс развертывания.Вы также можете загрузить библиотеку и ее зависимости самостоятельно перед любым вызовом Confluent.Kafka Confluent.Kafka.Impl.LibRdKafka.Initialize (System.String userSpecifiedPath) (по адресу <700d5bbe3b974ce5aed001c82b789f6a>: 0) Confluent.Uafka.System.Collections.Generic.IEnumerable 1[T] config) (at <700d5bbe3b974ce5aed001c82b789f6a>:0) Confluent.Kafka.Consumer 2 [TKey, TValue] .. ctor (System.Collections.Generic.IEnumerable 1[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)

Поскольку ошибка указывает, что существует проблема зависимости, поэтому я также скопировал эти dll в активыПапка / librdkafka / x64

  1. librdkafka
  2. librdkafkacpp

  3. msvcr120

  4. zlib

Теперь проблема в том, что мой проект зависает всякий раз, когда я пытаюсь его воспроизвести.

Помните: я загрузил все эти dll через nuget в vs 2017. Затем я приношу этидлл инто единство.

1 Ответ

0 голосов
/ 25 февраля 2019

Для будущего пользователя, вот процесс добавления Kafka в ваш проект Unity3d: На самом деле существует определенный порядок или иерархия папок для добавления dll в ваш проект.(Я не нашел никакой авторитетной ссылки по этому поводу, если кто-то найдет, пожалуйста, поделитесь)

  1. Сначала вставьте Confluen.Kafka dll в любую папку

enter image description here

Затем создайте папку librdkafka (убедитесь, что она создана рядом с dll confluent.kafka) и вставьте dll, относящуюся к вашей платформе, в папку x64 или x86 enter image description here

Сейчас, вы можете запустить мой пример кода (упомянутый в вопросе).

IMP ПРИМЕЧАНИЕ: После сборки плеера вы должны вручную скопировать dll-файлы в вашу папку Player / Managed / librdkafka.Вы должны создать папку librdkafka в управляемой папке, а затем вставить свои dll. (Опять же, я не знаю, зачем это нужно, но если кто-то нашел авторитетную ссылку, поделитесь)

...