29
STOMP 1.2 GETTING THE MESSAGE ACROSS: REBOOTED

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

Embed Size (px)

Citation preview

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