An outbound channel adapter endpoint connects a MessageChannel to a target system.
Outbound channel adapter is used to send the messages from internal messaging system to external service. @ServiceActivator annotation is capable of achieving this functionality.
Example
@ServiceActivator(inputChannel = "notifySecretMsg")
public void notifyExternalService(String msg) {
System.out.println("Acknowledgement received for the message '" + msg + "'");
}
How can I configure Http requests to not worry about response from external service.
Set expect reply property to false, while delivering the message to external service.@Bean
@ServiceActivator(inputChannel = "notifySecretMsg")
public HttpRequestExecutingMessageHandler httpRequestExecutingMessageHandler() {
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler();
handler.setExpectReply(false)
return handler;
}
Find the below working application.
Step 1: Create new maven project ‘outbound-adapter-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>outbound-adapter-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 service activators.
PrintService.java
package com.sample.app.service;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
@Component
public class PrintService {
@ServiceActivator(inputChannel = "secretMsgChannel", outputChannel = "notifySecretMsg")
public String consumeStringMessage(Message<String> message) throws InterruptedException {
System.out.println("Received message from secretMsgChannel : " + message.getPayload());
return message.getPayload();
}
@ServiceActivator(inputChannel = "notifySecretMsg")
public void notifyExternalService(String msg) {
System.out.println("Acknowledgement received for the message '" + msg + "'");
}
}
Step 4: Define main application.
App.java
package com.sample.app;
import java.util.UUID;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.annotation.Poller;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;
@SpringBootApplication
@Configuration
public class App {
@InboundChannelAdapter(channel = "secretMsgChannel", poller = {
@Poller(maxMessagesPerPoll = "2", fixedRate = "5000") })
Message<String> getSecretMessageFromExternalSystem() {
UUID uuid = UUID.randomUUID();
String secretMsg = uuid.toString();
return MessageBuilder.withPayload(secretMsg).build();
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Total project structure looks like below.
Run App.java, you will see below kind of messages in console.
Received message from secretMsgChannel : f319748c-dc72-4c80-8e50-0af114766cab Acknowledgement received for the message 'f319748c-dc72-4c80-8e50-0af114766cab' Received message from secretMsgChannel : fbc7851a-21d4-4922-94ec-ae5d02b418b7 Acknowledgement received for the message 'fbc7851a-21d4-4922-94ec-ae5d02b418b7'
You can download complete working application from below link.
https://github.com/harikrishna553/springboot/tree/master/spring-integration/outbound-adapter-demo
No comments:
Post a Comment