春云合约 - Feign Clients

时间:2017-03-03 05:48:11

标签: java spring spring-cloud spring-cloud-feign spring-cloud-contract

使用Spring云合同验证我的生产者和消费者之间的合同。在我的消费者控制器中,我使用Feign客户端调用另一种微服务方法来获取一些数据。但是现在在春季云计算合同中,这个微服务的存根调用是不可能的。

将Spring Cloud与Netflix OSS结合使用。

配置服务和eureka已经启动。现在我在8090端口本地安装了我的生产者。消费者使用Feign客户端调用生产者来获取一些数据。现在我得到500错误。它显示找不到URL。最接近的匹配是/ ping。我相信Feign客户端无法模拟,它以某种方式尝试与eureka连接,而不是从本地安装的生产者。你能帮我解决吗?

任何例子或任何想法都会很棒。

谢谢

1 个答案:

答案 0 :(得分:1)

这是可能的,这是我的JUnit测试(ParticipantsService使用Feign客户端)

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureStubRunner(ids = {"com.ryanjbaxter.spring.cloud:ocr-participants:+:stubs"}, workOffline = true)
@DirtiesContext
@ActiveProfiles("test")
public class OcrRacesApplicationTestsBase {

    @Autowired
    protected ParticipantsService participantsService;

    private List<Participant> participants = new ArrayList<>();


    //Hack to work around https://github.com/spring-cloud/spring-cloud-commons/issues/156
    static {
        System.setProperty("eureka.client.enabled", "false");
        System.setProperty("spring.cloud.config.failFast", "false");
    }

    @Before
    public void setup() {
        this.participants = new ArrayList<>();
        this.participants.add(new Participant("Ryan", "Baxter", "MA", "S", Arrays.asList("123", "456")));
        this.participants.add(new Participant("Stephanie", "Baxter", "MA", "S", Arrays.asList("456")));
    }

    @After
    public void tearDown() {
        this.participants = new ArrayList<>();
    }

    @Test
    public void contextLoads() {
        List<Participant> participantList = participantsService.getAllParticipants();
        assertEquals(participants, participantList);
    }
}