Od wersji 4.0 Posnet Server wspiera mechanizm pluginów umożliwiając rozszerzanie możliwości produktu. Pluginy są częścią paczki instalacyjnej i nie wymagają pobierania lub instalowania dodatkowych plików z internetu. Domyślnie wszystkie pluginy są wyłączone.
Wprowadzenie
Azure Service Bus, działający na chmurze Microsoft Azure, jest to usługą kolejkową, umożliwiającą budowanie zaawansowanych kolejek z mechanizmami routowania wiadomości, TTL, DLQ itp. Podobnie jak RabbitMQ usługa działa na bazie protokółu AMQP.
PosnetServer udostępnia RESTful API, czyli komunikację synchroniczną, a dzięki możliwości podłączenia go do usługi Azure Service Bus możemy zamodelować komunikację asynchroniczną. Do tej pory PosnetServer wspierał bardzo prosty mechanizm asynchronicznej komunikacji, przechowując kolejkę dokumentów oczekującą na wydrukowanie w pamięci. To rozwiązanie miało swoje ograniczenia. Przykładowo, restart serwisu powodował wyczyszczenie kolejki, jak również praca z dużym wolumenem wiadomości wymuszała loadbalancing i tak po stornie aplikacji.
Konfiguracja
W pliku konfiguracyjnym w sekcji plugin znajduje się pod-sekcja “azure-service-bus”. Po każdej zmianie w pliku config.json, należy zrestartować usługę PosnetServer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
"azure-service-bus" : { "enabled" : true, "reinitOnError" : true, "reinitDelay" : 2000, "input" : { "connectionstring" : "Endpoint=sb://posnetserver.servicebus.windows.net/;SharedAccessKe.................zMZzEHVTns=;EntityPath=posnet-server-input-queue", "queuename" : "posnet-server-input-queue", "autoack" : false }, "output" : { "active" : true, "connectionstring" : "Endpoint=sb://posnetserver.servicebus.windows.net/;SharedAccessKe............2bMcA=;EntityPath=posnet-server-output-queue", "queuename" : "posnet-server-output-queue" } } |
- enabled (domyślnie false) – włącza, wyłącza plugin
- reinitOnError (domyślnie true) – czy komunikacja ma być ponawiana automatycznie w przypadku błędów komunikacji z Azure Service Bus. Jeśli “false”, wówczas ponowne nawiązanie komunikacji wymaga restartu serwisu.
- reinitDelay (domyślnie 2000) – czas opóźnienia liczony w ms na reinicjalizację. Używany jedynie jeśli reinitOnError=”true”
- input.connectionstring – jest to connection string pobrany z Shared access policies w usłudze Azure
- input.queuename – nazwa używanej kolejki
- input.autoack (domyślnie false) – praca w trybie automatycznego potwierdzania wiadomości. Zalecany jest tryb manualny, czyli autoack=false
- output.active (domyślnie false) – włączenie, wyłączenie kolejki do asynchronicznego wysyłania odpowiedzi. Gdy output.active=true, PosnetServer wysyła na tę kolejkę wynik przetwarzania wiadomości, czyli numer wydrukowanego paragonu lub status błędu. Aby wiadomo było jakiego requestu dotyczy odpowiedź, należy w requescie wykorzystać strukturę “clientdata”.
- output.connectionstring – jest to connection string pobrany z Shared access policies w usłudze Azure
- output.queuename – nazwa używanej kolejki
- service.connectionstring – jest to connection string pobrany z Shared access policies w usłudze Azure. Kolejka serwisowa może służyć do wysyłania dodatkowych poleceń, np “pause” lub “resume” wiadomości wysyłanych na kolejkę “input”
- service.queuename – nazwa używanej kolejki
- service.autoack (domyślnie false) – praca w trybie automatycznego potwierdzania wiadomości. Zalecany jest tryb manualny, czyli autoack=false
KONFIGURACJA AZURE SERVICE BUS
Wejdź do usługi Azure Service Bus:
Utwórz namespace:
Wewnątrz namespace utwórz jedną lub dwie kolejki:
Wysyłanie requestów
Kliknij na kolejkę wejściową i z bocznego menu wybierz “Service Bus Explorer”
Wybierz “Send messages”. W pole “Body” należy wprowadizć payload zgodny ze schemą PosnetServer. Domyślnie payload traktowany jest jak schema pojedynczego paragonu, stąd podawanie w custom properies “path” jets opcjonalne.
Można również wysyłać polecenia /faktura lub /command, w następujący sposób:
Kolejka serwisowa
Wiadomości wysyłane są przez Azure Service Bus do aplikacji (model PUSH). Stad, czasem może zajść potrzeba chwilowego wstrzymania konsumpcji wiadomości z kolejki “input”. Można tego dokonać za pomocą API lub wysyłając komunikat na kolejkę serwisową: