Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login

    Events und asynchrone Verarbitung bzw. Queueing

    Scheduled Pinned Locked Moved Entwicklung
    4 Posts 2 Posters 566 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • F Offline
      franknagel
      last edited by

      Hallo,

      gibt es schon i-doit Nutzer, die eine Message Queue verwenden um ihre Events zu verteilen?
      Wir haben gerade ein Proof-of Concept im Test, welches mittels php-amqplib Events an einen RabbitMQ-Server weiterleitet. Wäre dies von allgemeinem Interesse? Zur Not kann man immer mit SHELL COMMAND ein Progamm starten, welches die Queue beschickt, aber der direkte Weg scheint mir eleganter.

      1 Reply Last reply Reply Quote 0
      • dkirstenD Offline
        dkirsten administrators
        last edited by

        Hi,

        also uns ist bisher noch nichts in der Richtung bekannt. Wenn Du Erfolge mit der Lösung hast, kannst Du sie aber gerne mit uns hier teilen. Passt ja auch ganz gut dazu, dass im Dezember eine neue Version des Event Add-ons veröffentlicht wird.

        Viele Grüße,

        Daniel

        1 Reply Last reply Reply Quote 0
        • F Offline
          franknagel
          last edited by

          Ich habe verschiedene Dinge ausprobiert:

          • Interne Erweiterung von i-doit mit php-amqplib
          • Python Skript mit pika via SHELL COMMAND
          • Go Programm via SHELL COMMAND

          Die Performance ergibt sich wie folgt:

          Vorgehen Dauer pro Event
          PHP mit php-amqplib 0.045s
          Python 0.267s
          Go 0.01s

          Die Lösung mit einem externen Programm in einer kompilierten Sprache verspricht also die beste Performance. Bei Python ist das immer wiederkehrende Laden der RabbitMQ-Bibliothek das Performance-Problem.

          Hier ist das verwendete Go-Programm für eigenen Versuche:

          package main
          
          import (
          	"os"
          	"log"
          
          	"github.com/streadway/amqp"
          )
          
          func failOnError(err error, msg string) {
          	if err != nil {
          		log.Fatalf("%s: %s", msg, err)
          	}
          }
          
          func main() {
          	uri := os.Args[1]
          	conn, err := amqp.Dial(uri)
          	failOnError(err, "Failed to connect to RabbitMQ")
          	defer conn.Close()
          
          	ch, err := conn.Channel()
          	failOnError(err, "Failed to open a channel")
          	defer ch.Close()
          
          	body := os.Args[3]
          	err = ch.Publish(
          		os.Args[2],     // exchange
          		"", // routing key
          		false,  // mandatory
          		false,  // immediate
          		amqp.Publishing {
          			ContentType: "application/base64",
          			Body:        []byte(body),
          		})
          	failOnError(err, "Failed to publish a message")
          }
          
          
          1 Reply Last reply Reply Quote 0
          • dkirstenD Offline
            dkirsten administrators
            last edited by dkirsten

            Sehr cool. Hier ist übrigens mal nen Preview auf die neue Event Version:

            0_1542378584488_2940aeb7-067a-4a6c-9d08-f266223f1776-image.png

            0_1542378687683_7e33e224-f81d-4568-8e9b-bb409725fc71-image.png

            Viele Grüße,

            Daniel

            1 Reply Last reply Reply Quote 1
            • First post
              Last post