Open topic with navigation

# Persistent Publish-Subscribe Example

Persistence is the potential to store a message after sending it and before it is received so off line subscribers can consume it at a later time. Publishers and subscribers are completely decoupled. Subscribers can recover messages which may have gotten lost between the publisher and the subscriber due to network failure, resource issues along the delivery path, or any other failure. For details about persistence, see the FTL Concept guide, Persistence: Stores and Durables.

The sample programs from `samples\bin\advanced` are `tibsendex` (the publisher) and `tibrecvex` (the subscriber).

The following command line options are used for persistent message delivery:

- `-c` option: Count of messages informing `tibrecvex` (subscriber) to exit after receiving `n` messages or `tibsendex` (publisher) to send n messages.

- `-d` option: Durable name that specifies a durable name, which is used to express interest in a particular message stream by a subscriber.

- `-e` option: Endpoint to use that has been configured for persistence.

Perform these steps:

1. Open two terminals. Make sure you have run the `setup` command and started the FTL server. See the Command Reference.

2. In a terminal, start the `tibrecvex` sample application located in the `/samples/bin/advanced` directory, using the -c, -d, and -e options:

   - Linux and macOS:

         $./tibrecvex -a default -c 10 -d myDr -e persistent localhost:8080

   - Windows:

         >tibrecvex -a default -c 10 -d myDr -e persistent localhost:8080

1. In the other terminal, start the `tibsendex` sample application located in the `/samples/bin/advanced` directory using the -c and -e options.

   - Linux and macOS:

         $./tibsendex -c 20 -a default -e persistent localhost:8080

   - Windows:

         >tibsendex -c 20 -a default -e persistent localhost:8080

## Check Your Result

You should see the `tibrecvex` application receive the first 10 messages that are sent and then exit similar to the output below.

    #
    # tibrecvex
    #
    # TIBCO FTL Version <n.n> V<n>
    #
    Invoked as: tibrecvex -a default -c 10 -d myDr -e persistent localhost:8080
    waiting for message(s)
    received message 1
    message:
    type long: 1
    type string: 'tibsend-persistent'
    type opaque: size 6 data: 'opaque'
    received message 2
    message:
    type long: 2
    type string: 'tibsend-persistent'
    type opaque: size 6 data: 'opaque'
    received message 3
    message:
    type long: 3
    type string: 'tibsend-persistent'
    type opaque: size 6 data: 'opaque'
    received message 4
    message:
    type long: 4
    ...
    received message 8
    message:
    type long: 8
    type string: 'tibsend-persistent'
    type opaque: size 6 data: 'opaque'
    received message 9
    message:
    type long: 9
    type string: 'tibsend-persistent'
    type opaque: size 6 data: 'opaque'
    received message 10
    message:
    type long: 10
    type string: 'tibsend-persist'
    type opaque: size 6 data: 'opaque'

The `tibsendex` application messages contain three fields:

- `type long`: Containing a monotonically increasing integer value

- `type string`: Containing the fixed string `tibsend-persistentendpoint`

- `type opaque`: Containing 6 bytes corresponding to the ASCII characters spelling out “`opaque`”

The `tibsendex` application sent all 20 messages.

    #
    # tibsendex
    #
    # TIBCO FTL Version <n.n>   V<n>
    #
    Invoked as: /tibsendex -c 20 -a default -e persistent localhost:8080 localhost:8080
    sending message 1
    sending message 2
    sending message 3
    sending message 4
    sending message 5
    sending message 6
    sending message 7
    sending message 8
    sending message 9
    sending message 10
    sending message 11
    sending message 12
    sending message 13
    sending message 14
    sending message 15
    sending message 16
    sending message 17
    sending message 18
    sending message 19
    sending message 20

## Get the Next 10 Messages

The `tibsendex` application sent 20 messages. The 10 additional messages, numbered 11 through 20 are retained by an FTL store.

1. Run the `tibrecvex` application again using the same command line.

2. Check the result: You should receive the remaining 10 messages, even if the `tibsendex` application has completed sending all 20 messages and has exited.

If you see messages come in quickly at first and then slower, this receiver is getting previously sent messages quickly and, once those are delivered, subsequent messages are received in real-time based on the cadence of the publisher.

## Failure and Restart

In a production scenario, persistence guards against system, network, or FTL server failures. Multiple FTL servers are run across multiple systems to provide redundancy for the persistence service so failures do not compromise your message delivery.

If you want to see how the persistence service ensures message delivery across subscriber failures and restarts:

1. Increase the message count to a significantly higher number to give you time to stop `tibrecvex` before all of the messages have been delivered.

2. Stop `tibrecvex` before all the messages are received.

3. Restart it to receive the remaining messages.

Did you find this helpful?

Yes No
Great!
Thanks for taking the time to give us some feedback.
Sorry about that

Why wasn't this helpful? (check all that apply)

Could not find what I was looking for
Instructions confusing or unclear
Instructions did not work

Want to tell us more?

Please select at least one option or provide details about the issue!!

Error occurred while submitting feedback.

Error2 occurred while submitting feedback.

TIBCO FTL® - Enterprise Edition

Copyright © 2009-2024. Cloud Software Group, Inc. All Rights Reserved.