Skip to content

Conditional Pub/Sub

The example demonstrates publishing a weather forecast message with headers which can be used to create a conditional subscriber. The subscriber uses a selector to get weather forecast messages for the Dallas area when the expected temperature is higher than 60F degrees. The message is published into the demo channel.

Subscriber

// subscribe to a channel
IChannel channel = Backendless.Messaging.Subscribe( "demo" );

// declare a listener
MessageReceived<string> messageListener = ( message ) =>
{
  Console.WriteLine( $"received message {message}");
};

// add the listener to the channel
string selector = "city = 'Dallas' and temperature > 60";
channel.AddMessageListener( selector, messageListener );

Publisher

curl -X POST \
  https://api.backendless.com/APP-ID/REST-API-KEY/messaging/demo \
  -H 'content-type: application/json' \
  -d '{  "message": "Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%.", 
         "headers" : { 
             "city" : "Dallas",
             "state" : "Texas", 
             "temperature":62    
         }                  
      }'
var message = "Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%.";
var publishOptions = new Backendless.PublishOptions({
       headers: {
          "city": "Dallas",
          "state": "Texas",
          "temperature": 62
       }
   });

Backendless.Messaging.publish( "demo", message, publishOptions )
 .then( function( result ) {
    console.log( "message has been published" );
  })
 .catch( function( error ) {
    console.log( "error publishing the message - " + error );
  })
String message = "Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%.";
PublishOptions publishOptions = new PublishOptions();
publishOptions.putHeader( "city", "Dallas" );
publishOptions.putHeader( "state", "Texas" );
publishOptions.putHeader( "temperature", 62);

Backendless.Messaging.publish( "demo", 
                               message,
                               publishOptions, 
                               new AsyncCallback<MessageStatus>()
{
  @Override
  public void handleResponse( MessageStatus response )
  {
    Log.i( "MYAPP", "Message has been published" );  
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", "Error publishing the message" );
  }
} );
let message = "Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%."

let publishOptions = PublishOptions()
publishOptions.addHeader(name: "city", value: "Dallas")
publishOptions.addHeader(name: "state", value: "Texas")
publishOptions.addHeader(name: "temperature", value: 62)

Backendless.shared.messaging.publish(channelName: "demo", message: message, publishOptions: publishOptions, responseHandler: { messageStatus in
    print("Message has been published")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
NSString *message = @"Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%.";

PublishOptions *publishOptions = [PublishOptions new];
[publishOptions addHeaderWithName:@"city" value:@"Dallas"];
[publishOptions addHeaderWithName:@"state" value:@"Texas"];
[publishOptions addHeaderWithName:@"temperature" value:@62];

[Backendless.shared.messaging publishWithChannelName:@"demo" message:message publishOptions:publishOptions responseHandler:^(MessageStatus *messageStatus) {
    NSLog(@"Message has been published");
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
AsyncCallback<MessageStatus> callback = new AsyncCallback<MessageStatus>(
   messageStatus =>
   {
     Console.WriteLine( $"message has been published {messageStatus.MessageId}"); 
   },
   fault =>
   {
     Console.WriteLine( $"error {fault.Message}");
   } 
);

PublishOptions publishOptions = new PublishOptions();
publishOptions.AddHeader( "city", "Dallas" );
publishOptions.AddHeader( "state", "Texas" );
publishOptions.AddHeader( "temperature", 62 );

string message = "Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%."
Backendless.Messaging.Publish( message,
                               "demo",
                               publishOptions,
                               callback );
String message = "Thunderstorms likely. High 62F. Winds NNW at 10 to 15 mph. Chance of rain 90%.";
PublishOptions publishOptions = new PublishOptions();
publishOptions.headers = {
  "city": "Dallas", 
  "state": "Texas", 
  "temperature": "62"
};
Backendless.messaging.publish(message, 
                              channelName: "demo", 
                              publishOptions: publishOptions)
.then((response) {
  print("Message has been published");
});