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¶
Channel channel = await Backendless.messaging.subscribe("demo"); String selector = "city = 'Dallas' and temperature > 60"; channel.addMessageListener((message) { print("Received a message: $message"); }, selector: selector);
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"); });