I have the following configuration . A Feign client with Fallback class . Inside the Fallback class , there is one more fallback using Hystrix command . The configuration is working as expected . I would like to Identify if the Feign execution was successful without triggering any fallback and in that case I would like do some additional steps . How can we identify if the Feign execution was successful without triggering any fallback ?
Spring cloud version used is
<version>Camden.SR3</version>
Feign interafce
@FeignClient(name="message", ,fallback=MessagingPublisher.class)
public interface ServiceClient{
@RequestMapping(method = RequestMethod.POST, value = "/api/v1/NotificationStatus", consumes = "application/json")
public void postNotificationStatus(NotificationStatus status);
}
Fallback Class
@EnableBinding(NotificationStatusChannel.class)
public class MessagingPublisher implements ServiceClient{
MessageChannel notificationStatusOuputChannel;
@Autowired
NotificationStatusMessageDao notificationStatusMessageDao;
@Autowired
public MessagingPublisher(MessageChannel notificationStatusOuputChannel) {
this.notificationStatusOuputChannel = notificationStatusOuputChannel;
}
@Override
@HystrixCommand(fallbackMethod = "persistforRetry")
public void postNotificationStatus(NotificationStatus status) {
notificationStatusOuputChannel.send(MessageBuilder.createMessage(status,
new MessageHeaders(Collections.singletonMap(MessageHeaders.CONTENT_TYPE, "application/json"))));
}
/**
* if both primary and the initial fallback fails then message is persisted so that a retry scheduler task can retry sending these messages
* @param status
*/
public void persistforRetry(NotificationStatus status) {
notificationStatusMessageDao.save(new PersistableNotificationStatus(status));
}
invocation
@Component
public class NotificationStatusPublisher {
ServiceClient serviceClient;
@Autowired
public NotificationStatusPublisher(ServiceClient serviceClient) {
this.ServiceClient= serviceClient;
}
/**
* Post the list
* @param exportRecords
*/
public void postNotificationStatus(NotificationStatus status) {
serviceClient.postNotificationStatus(status);
}
entries in application.properties
message.ribbon.listOfServers= https://notificationstatus-messagereceiver-dev.u2.app.cloud.net/api/v1/NotificationStatus,https://notificationstatus-messagereceiver-dev.u5555.app.cloud.net/api/v1/NotificationStatus
message.ribbon.ReadTimeout=800
message.ribbon.ConnectTimeout=250
message.ribbon.OkToRetryOnAllOperations=true
message.ribbon.MaxAutoRetriesNextServer=2
message.ribbon.MaxAutoRetries=0
hystrix.command.message.execution.isolation.strategy=THREAD
hystrix.command.message.execution.isolation.thread.timeoutInMilliseconds=100000