Как узнать хозяина с лентой?

У меня есть приложение с эврикой, лентой и притворством. У меня есть фиктивный RequestInterceptor, но проблема в том, что мне нужно знать, с какого хоста я звоню. Пока что с моим текущим кодом я могу получить путь только с RequestTemplate, но не с хостом.

Есть идеи?


comment
зачем тебе хост?   -  person spencergibb    schedule 01.03.2018
comment
Мне нужно было имя хоста или клиента, чтобы позвонить в другую службу, я исправил это расширение из LoadBalancerFeignClient.   -  person nole    schedule 01.03.2018
comment
Можете ли вы более подробно ответить на ваш вопрос. У меня точно такая же проблема   -  person Rsaleh    schedule 09.06.2021


Ответы (1)


Я тоже новичок в этом, но я думаю, что только что узнал что-то, имеющее отношение к вашему вопросу.

В создаваемой вами службе каждому экземпляру может быть присвоен некоторый уникальный идентификатор, связанный со свойством, включенным в его профиль экземпляра. Некоторые примеры .properties ниже:

application.properties (общие свойства между экземплярами)

spring.application.name=its-a-service
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

application-instance1.properties

server.port=5678
instance.uid=some-unique-property

application-instance2.properties

server.port=8765
instance.uid=other-unique-property

Этот сервис, как показывает чрезвычайно надуманный пример, может отправлять @Value аннотированных атрибутов для использования приложением Ribbon:

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ItsAServiceApplication {

    @Value("${server.port}")
    private int port;

    @Value("${instance.uid}")
    private String instanceIdentifier;

    public static void main(String[] args) {
        SpringApplication.run(ItsAServiceApplication.class, args);
    }

    @RequestMapping
    public String identifyMe() {
        return "Instance: " + instanceIdentifier + ". Running on port: " + port + ".";
    }
}

И чтобы завершить пример, приложение Ribbon, которое может использовать эти свойства, может выглядеть так:

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ServiceIdentifierAppApplication {

    @Autowired
    private RestTemplate restTemplate;

    public static void main(String[] args) {
        SpringApplication.run(ServiceIdentifierAppApplication.class, args);
    }

    @GetMapping
    public String identifyMe() {
        return restTemplate.getForEntity("http://its-a-service", String.class).getBody();
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

Результаты: Перезагрузка остального шаблона, созданного службами

Как я уже говорил ранее, я довольно новичок в этом и только учусь сам. Надеюсь, это дало вам представление о том, как вы можете отправить эти свойства! Я полагаю, что создание идентификатора динамического свойства через Spring Cloud Config было бы идеальным здесь.

person samtietze    schedule 03.03.2018
comment
Как я уже сказал в своем последнем комментарии, я решил свою проблему с помощью нового класса, который расширяется от LoadBalancerFeignClient. Во всяком случае, я использую фиктивный клиент вместо шаблона отдыха. Когда вы работаете с притворством и лентой, ваш хост удаляется из вашего URL-адреса. - person nole; 05.03.2018
comment
Ну, вы выигрываете немного, вы теряете больше. - person samtietze; 05.03.2018