Example of manually publishing a message to an outbound channel

0

In this article, we will learn how to manually create a message and publish to an outbound channel.
We will create an Employee object and publish it to a channel for further processing. Next, a Service Activator will pickup the message from the channel to process it.

Manually create and publish message to channel

In our example, we only need one channel and an endpoint. In applicationContext.xml, we will configure our channel and endpoint.
First declare the channel processEmpChannel to which the message will be published.
Next, will configure the bean that will build and publish our message. SpringIntegrationChannelExample is the class and postEmployeeMsg is the method that will create and publish the message. Since it needs to know the channel to publish the message, we will have to inject the channel bean to SpringIntegrationChannelExample.

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
	xmlns:int-jms="http://www.springframework.org/schema/integration/jms"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">

	<int:channel id="processEmpChannel">
		<int:queue />
	</int:channel>

	<bean id="springIntChannelExample"
		class="com.javarticles.spring.integration.SpringIntegrationChannelExample">
		<property name="out" ref="processEmpChannel" />
	</bean>
	
	<bean id="empProcessor"
		class="com.javarticles.spring.integration.EmpProcessor"/>

	<int:service-activator input-channel="processEmpChannel" ref="empProcessor">
		<int:poller fixed-rate="500"/>
	</int:service-activator>
</beans>

The actual payload to be sent needs to be encapsulated in a Message and published to the channel processEmpChannel. The service-activator endpoint will then pick up the message as soon as it arrives on the processEmpChannel and calls the postEmployeeMsg method on class SpringIntegrationChannelExample. Since there is only one method in the bean, we don’t have to mention the method name else we must mention the method name to be invoked in method attribute.

We will use the utility class MessageBuilder and call its static method withPayload to build the message.

MessageChannel interface has send method to send data using a Message object

SpringIntegrationChannelExample:

package com.javarticles.spring.integration;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;

public class SpringIntegrationChannelExample {
    private MessageChannel out;
    
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        SpringIntegrationChannelExample springIntExample = (SpringIntegrationChannelExample) context.getBean("springIntChannelExample");
        springIntExample.postEmployeeMsg();
    }
    
    public void postEmployeeMsg() {
        Employee emp = new Employee(1, "Joe", 37);
        Message msg = MessageBuilder.withPayload(emp).build();
        out.send(msg);
    }

    public void setOut(MessageChannel out) {
        this.out = out;
    }       
}

Output:

Employee Employee: [Joe, ID: 1, AGE 37] processed

Download the Source Code

In this article, I have shown how to manually create a message and publish to an outbound channel.
You can download the source code here springintegrationchannel.zip

Share.

Leave A Reply