STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director...

29
STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED

Transcript of STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director...

Page 1: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

STOMP 1.2GETTING THE MESSAGE ACROSS:

REBOOTED

Page 2: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

BRIEF INTRODUCTION

• Julian Lyndon-Smith, IT Director dot.r limited• Progress developer since v3, 1987• Living proof of “old dog, new tricks”

• Often hanging around on PEG and PSDN• Always up for a good argument ;)

Page 3: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WHY MESSAGING ?

• In-application• Inter process• Lan• Wan• Internet

Page 4: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WHAT’S WRONG WITH …

• Pub / sub• Sonic• IP/Works• Zero MQ• MO/SMS

Page 5: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WHAT’S NEEDED

• Message server• Clients connect to server, like 4GL clients to db server

• Free / open source• Portable• Easy to set up and admin• Usable from the 4GL

Page 6: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WHAT’S AVAILABLE

• Apache Apollo• HornetMQ• RabbitMQ• MorbidMQ• Apache ActiveMQ

Page 7: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WE CHOSE …

• Apache ActiveMQ• http://activemq.apache.org• Fusesource used to be a division of Psc• Fits all the criteria• Queues• Topics• wildcards

Page 8: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WHAT PROTOCOL ?

• Openwire• REST• Stomp• XMPP• AMQP

Page 9: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

ENTER STOMP

“STOMP provides an interoperable wire format so that STOMP clients can communicate with any STOMP message broker to provide easy and widespread messaging interoperability among many languages, platforms and brokers.”

Page 10: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

ENTER STOMP

• Simple Text-Orientated Messaging Protocol• Stomp.github.com

• Text-based• Therefore easy to use in the 4GL

• Multiple clients• Java, .net, javascript, php, ruby …

Page 11: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

STOMP PROTOCOL

• Each message is sent within a “Frame”COMMANDHeader1:valueHeader2:value

Body^@

Page 12: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

STOMP PROTOCOL

• Frame starts with command string<EOL>• Followed by zero or more headers

• Each header consists of <key>:<value><EOL>• Blank line indicates end of headers

• The body is terminated with a null ( chr(0) )

Page 13: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

STOMP PROTOCOL

• All commands and headers are in UTF-8• As mentioned, the body is terminated with chr(0)• Unless you have a content-length:n header• Which then means the body is read for n octets• Regardless of embedded nulls

Page 14: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

CONNECTING

• Client initiates connection by sending a CONNECT frame

CONNECT

accept-version:1.2

host:stomp.github.org

^@

Page 15: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

CONNECTED

• Server responds with a CONNECTED frameCONNECTED

version:1.2

^@

Page 16: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

SENDING MESSAGES

• Client sends messages by sending a SEND frame to a destination• Queue• Topic

Page 17: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

SENDING MESSAGES

SEND

destination:/queue/a

content-type:text/plain

hello queue a

^@

Page 18: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

SENDING MESSAGES

SEND

destination:/topic/b

content-type:text/plain

hello topic b

^@

Page 19: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

RECEIVING MESSAGES

• Client receives messages by sending a SUBSCRIBE frame• Queue• Topic• Wildcards

Page 20: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

RECEIVING MESSAGES

• Client receives messages by sending a SUBSCRIBE frame• Waits for a message to arrive on the socket• Data is parsed by the 4GL

Page 21: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

RECEIVING MESSAGES

SUBSCRIBE

id:0

destination:/queue/foo

^@

Page 22: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

RECEIVING MESSAGES

• Server sends messages to subscribed clients by sending a MESSAGE frame

MESSAGE

subscription:0

message-id:007

destination:/queue/a

content-type:text/plain

hello queue a^@

Page 23: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WELL, THAT SEEMS SIMPLE ENOUGH

Page 24: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WALK BEFORE YOU RUN …

• ABL Socket issues• Read-response procedure

• ABL Issues• Memory leaks

• Performance issues

Page 25: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

SUCCESS !

• All 4GL issues solved • By better coding • Fixed sockets by :enabled• Fixed memory leaks by better use of events

Page 26: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

PLATFORMS

• 4GL Clients • Win32, webspeed, character• NOT Appserver• Linux supported (as tested by Tom Bascom)

• Many other clients

Page 27: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

WHAT CAN WE DO WITH THIS ?

• 4GL – 4GL communication• Internal, local, network, internet

• Node.js 4GL• Web browsers 4GL• Rest / curl / php / ruby / js 4GL …

Page 28: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

HOW MUCH IS THIS GOING TO COST ?

• Nothing. Nada. • Server is free (ActiveMQ)• http://activemq.apache.org/

• 4GL Stomp adapter is free• https://bitbucket.org/jmls/stomp/overview• MIT licence. Free to use in commercial products

Page 29: STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED. BRIEF INTRODUCTION Julian Lyndon-Smith, IT Director dot.r limited Progress developer since v3, 1987 Living.

DEMOS, QUESTIONS,DEBATE