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");
});