Skip to content

Publish Custom Type

The example demonstrates publishing a value of a custom type (Person) and creating a subscriber to receive objects of that type. The message is published into the demo channel.

Subscriber

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

// declare a listener
MessageReceived<Person> messageListener = ( personObject ) =>
{
  Console.WriteLine( $"received person object {personObject.name}");
};

// add the listener to the channel
channel.AddMessageListener( messageListener );

Codeless Reference

pubsub_api_subscribe_for_all_messages_1

where:

Argument                Description
id The unique identifier of the event listener.
channel Name of the channel to subscribe to.
selector A selector is a query expressed in the SQL-92 syntax and formatted as the condition part of the SQL's WHERE clause. The condition references headers in the published messages.
message When a listener gets triggered, it assigns data of the message matching the where clause condition to this variable(message).

This operation does not return a value.

The example below creates a message listener with id "1111-1111-1111-11111" for the "demo" channel. When a message is published to the "demo" channel the listener gets triggered and saves the message content to the message variable. Then the data stored in the message variable gets printed.

pubsub_api_publishing_strings_2

Publisher

curl -X POST \
  https://api.backendless.com/APP-ID/REST-API-KEY/messaging/demo \
  -H 'content-type: application/json' \
  -d '{  "message": { "name":"Joe", "age":30}}'
function Person() {

}

var personObj = new Person();
personObj.name = "Joe";
personObj.age = 30;

Backendless.Messaging.publish( "demo", personObj )
 .then( function( result ) {
    console.log( "message has been published" );
  })
 .catch( function( error ) {
    console.log( "error publishing the message - " + error );
  })
public class Person
{
  // can also use getter/setter methods 
  // instead of public fields
  public String name;
  public int age;
}

Person personObject = new Person();
personObject.name = "Joe";
personObject.age = 30;

Backendless.Messaging.publish( "demo", 
                               personObject, 
                               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 person = Person()
person.name = "Joe"
person.age = 30

Backendless.shared.messaging.publish(channelName: "demo", message: person, responseHandler: { messageStatus in
    print("Message has been published")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})
Person *person = [Person new];
person.name = @"Joe";
person.age = @30;

[Backendless.shared.messaging publishWithChannelName:@"demo" message:person responseHandler:^(MessageStatus *messageStatus) {
    NSLog(@"Message has been published");
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
public class Person
{
  // can also use get/set properties 
  // instead of public fields
  public string name;
  public int age;
}

Person personObject = new Person();
personObject.Name = "Joe";
personObject.Age = 30;

AsyncCallback<MessageStatus> callback = new AsyncCallback<MessageStatus>(
   messageStatus =>
   {
     Console.WriteLine( $"message has been published {messageStatus.MessageId}"); 
   },
   fault =>
   {
     Console.WriteLine( $"error {fault.Message}");
   } 
);

Backendless.Messaging.Publish( "demo", 
                               personObject, 
                               callback );
@reflector
class Person {
  String name;
  int age;
}

Person personObject = new Person()
  ..name = "Joe"
  ..age = 30;
Backendless.messaging.publish(personObject, channelName: "demo").then((response) {
  print("Message has been published");
});

Codeless Reference

pubsub_api_basic_publish_1

where:

Argument                Description
channel name Name of the channel where a message must be published to.
subtopic name The subtopic of the message allows developers to designate and filter messages by subtopic name. For instance, if a messaging application has a group and a few subgroups, all messages sent to the main group can be marked with this subtopic name which can be used to route messages to the appropriate subgroups depending on the context.
message The contents of the message that must be published to a channel.
headers Message headers is a collection of name/value pairs. A subscriber can set a filter expressed as an SQL "where clause" query (called selector) which Backendless uses to determine whether a message should be delivered to the subscriber. When the query matches the published data in message headers, message is delivered to the corresponding subscriber. For more information see the Conditional Delivery section of this guide.
publish at Must be a Unix Timestamp, which is the number of milliseconds since the Epoch (January 1st, 1970 at UTC).  Note that if you want to specify the number of seconds instead of milliseconds, you must multiply the number by 1000 or add three trailing zeroes to your number (e.g. (1681324179 * 1000) or 1681324179000.
return result When this box is checked, the operation returns an object containing the status of the message delivery and a unique message identifier.

Returns an object containing the status of the message delivery and a unique message identifier:

// Sample object  

{  
    "errorMessage":null,  
    "messageId":"message:FCBD8BF1-A45D-4564-B449-3C91D4896987",  
    "status":"published"  
}

The example below publishes the message containing a custom object to the "demo" channel.

pubsub_api_publishing_custom_type_2