Consulting (fachlich & IT) | Software-Entwicklung |
|
|
AMQP (Advanced Message Queuing Protocol)
Protokoll zur Kommunikation über Systemgrenzen
Produzent (Producer) Anwendung, die eine Nachricht erstellt
Konsument (Consumer) Anwendung, die eine Nachricht empfängt
Nachricht (Message)
Information, die zwischen Produzent und Konsument ausgetauscht wird
Warteschlange (Queue)
Speichert die Nachrichten zwischen
Verbindung (Connection)
TCP Netzwerkverbindung zwischen Anwendung und RabbitMQ broker
Channel
Virtuelle Verbindung innerhalb der TCP-Verbindung
Binding
Verknüpfung zwischen Queue und Exchange
Routing key
"Adresse", nach welcher der Exchange entscheidet, in welche Queue er die Nachricht leitet.
Benutzer (User)
Vhost (virtual host) Erlaubt, Anwendung auf einer RabbitMQ Instanz zu isolieren
apt-get install rabbitmq-server
$ docker run -d --hostname my-rabbit --name firstRabbit rabbitmq:3
$ docker run -d --hostname myRabbit --name myRabbit
-p 5672:5672 -p 15672:15672 rabbitmq:3-management
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "logs",
routingKey: "");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>{
var message = Encoding.UTF8.GetString(ea.Body);
DoSomething(MyMessage.Deserialize(message)); };
channel.BasicConsume(queue: queueName, noAck: true,
consumer: consumer);
}
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");
var message = new MyMessage {Content = "Hallo Welt"};
var body = Encoding.UTF8.GetBytes(message.Serialize());
channel.BasicPublish(exchange: "logs", routingKey: "",
basicProperties: null, body: body);
}
Serialisierung, Fehlerbehandlung ... fehlt alles noch
using System;
using EasyNetQ;
namepace FP.MsRmq.Connecting
{
public class Programm
{
public static void Main(string[] args)
{
var myBus = RabbitHutch.CreateBus("host=myRabbitMQ");
}
}
}
Option | Standardwert | Bemerkung |
---|---|---|
host | 5672 | DNS-Name/IP[:Port] |
username | guest | |
passwort | guest | |
prefetchcount | 50 | Anzahl der Nachrichten, die gleichzeitig abgerufen werden |
timeout | 10 | timeout in Sekunden |
publisherConfirms | false | Erzwingt eine Annahmebestätigung |
myBus.Subscribe<MyClass>("MySub",
msg => DoSomething(msg));
myBus.SubscribeAsync<MyClass>("MySubAsync",
msg => DoSomethingAsync(msg));
Publish
var msg = new MyClass{};
myBus.Publish(msg);
myBus.PublishAsync(msg);
myBus.Subscribe<MyClass>("MyTopicSub",
msg => DoSomething(msg), x => x.WithTopic("MyTopic"));
Publish
var msg = new MyClass{};
myBus.Publish(msg, "MyTopic");
myBus.Respond<MyClass1,MyClass2>(DoSometingWithResult);
myBus.RespondAsync<MyClass1,MyClass2>(DoSometingAsyncWithResult);
Request
var req = new MyClass1{};
var result = myBus.Request<MyClass1,MyClass2>(req);
var result = await myBus.RequestAsync<MyClass1,MyClass2>(req);
myBus.Receive("MyMessageQueue", x => x
.Add<MyClassA>(DoSomethingWithA)
.Add<MyClassB>(DoSomethingWithB);
Request
myBus.Send("MyMessageQueue", new MyClassA {});
myBus.Send("MyMessageQueue", new MyClassB {});
Prüfschritt | Bill Service | Reversal Service | |||
---|---|---|---|---|---|
Kunde ist bekannt | Ja | Nein | Ja | Nein | |
Quellrechnung vorhanden | Ja | Nein | |||
Daten speichern | Ja | Nein | Ja | Nein | Nein |
Antwort per Dispatcher senden | Bestätigung | Ablehnung (Kunde unbekannt) | Bestätigung | Ablehnung (Quellrechnung unbekannt) | Ablehnung (Kunde unbekannt) |
https://commons.wikimedia.org/wiki/File%3AVisual_Studio_2013_Logo.svg
https://www.docker.com/sites/default/files/legal/docker_media_kit_jan_2016.zip
http://easynetq.com/design/logo_design_150.png
https://assets.wp.nginx.com/wp-content/themes/nginx-theme/assets/img//logo.png
https://www.rabbitmq.com/img/rabbitmq_logo_strap.png
https://avatars1.githubusercontent.com/u/706659?v=3&s=400
https://www.flickr.com/photos/kristiand/3223044657/
http://www.postgresql.org/media/img/about/press/elephant.png