Sunday, 13 June 2021

Spring integration: Service activator endpoint

Service activator endpoint is used to connect our internal services to the messaging framework.

 

You can configure both input channel and output channel for a service activator endpoint.

 

You can define a service activator using @ServiceActivator annotation.

 

Example

@ServiceActivator(inputChannel = "myInputChannel", outputChannel = "myOutputChannel")
public String toUppercase(Message<String> message) {
	System.out.println("Received message from myInputChannel : " + message.getPayload());

	return message.getPayload().toUpperCase();
}

 

In the above example, toUppercase method receives the input from "myInputChannel" and send the response to "myOutputChannel"). If the service method do not return any value, then you no need to configure the outputChannel. If no output channel has been configured, the reply is sent to the channel specified in the message’s “return address”, if available.

 

Follow below step-by-step procedure to build complete working application.

 

Step 1: Create new maven project ‘service-activator-demo’.

 

Step 2: Update pom.xml with maven dependencies.

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.sample.app</groupId>
	<artifactId>service-activator-demo</artifactId>
	<version>1</version>

	<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.0</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-integration</artifactId>
		</dependency>

	</dependencies>

</project>

 

Step 3: Define gateway.

 

CustomGateway.java

 

package com.sample.app.gateway;

import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.messaging.Message;

@MessagingGateway
public interface CustomGateway {

	@Gateway(requestChannel = "myInputChannel")
	public void print(Message<String> message);

}

 

Step 4: Define service activator endpoints.

 

ConsumerEndpoint.java

 

package com.sample.app.endpoints;

import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;

@Component
public class ConsumerEndpoint {

	@ServiceActivator(inputChannel = "myOutputChannel")
	public void consumeStringMessage(String message) {
		System.out.println("Received message from myOutputChannel : " + message);
	}

	@ServiceActivator(inputChannel = "myInputChannel", outputChannel = "myOutputChannel")
	public String toUppercase(Message<String> message) {
		System.out.println("Received message from myInputChannel : " + message.getPayload());

		return message.getPayload().toUpperCase();
	}
}

 

Step 5: Define main application class.

 

App.java

 

package com.sample.app;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;

import com.sample.app.gateway.CustomGateway;

@SpringBootApplication
@Configuration
public class App {

	@Autowired
	private CustomGateway customGateway;

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}

	@Bean
	public CommandLineRunner demo() {
		return (args) -> {

			Message<String> msg = MessageBuilder.withPayload("india is a beautiful country").build();

			customGateway.print(msg);
		};

	};

}

 

Total project structure looks like below.


 

Run App.java, you will see below messages in console.

Received message from myInputChannel : india is a beautiful country
Received message from myOutputChannel : INDIA IS A BEAUTIFUL COUNTRY

 

You can download complete working application from below link.

https://github.com/harikrishna553/springboot/tree/master/spring-integration/service-activator-demo

 

 

 

Previous                                                    Next                                                    Home

No comments:

Post a Comment