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