0

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
Paolo Casciello
  • 7,982
  • 1
  • 43
  • 42
Jimmi Skaria
  • 53
  • 1
  • 8

0 Answers0