2016-05-26 6 views
0

Я должен реализовать свой проект как микросервисную арку. Для этого я делаю одно примерное приложение, используя Spring Boot, добавляя два no. У меня есть три службы. Вот моя регистрация-server.yml. Аналогично у меня есть account-server.yml и user-service.yml. Я хочу позвонить add(), используя UserService.java без концепции RMI, так как я использую Spring Boot. Также мне не нужен звонок REST, так как это будет дорого для моего проекта. Как я могу вручную написать код для lookup() в UserService, чтобы он мог позвонить в Adder?Доступ к микросервису с использованием Spring Boot

@EnableAutoConfiguration 
@EnableDiscoveryClient 
public class AddService { 

public static int add(int x,int y){ 
    int z=x+y; 
    System.out.println("The sum of no. is "+z); 
    return z; 
} 

public static void main(String[] args) { 
    System.setProperty("spring.config.name", "add-service"); 
    SpringApplication.run(AddService.class, args); 
} 

@SpringBootApplication 
@EnableEurekaServer 
public class RegistrationService { 

public static void main(String[] args) { 
    // Tell server to look for registration.properties or registration.yml 
    System.setProperty("spring.config.name", "registration-service"); 

    SpringApplication.run(RegistrationService.class, args); 
} 


@SpringBootApplication 
@EnableDiscoveryClient 
public class UserService { 
public static void main(String[] args) { 

    System.setProperty("spring.config.name", "registration-service"); 

    SpringApplication.run(UserService.class, args); 
} 




    eureka: 
    instance: 
    hostname: localhost 
    client: # Not a client, don't register with yourself 
    registerWithEureka: false 
    fetchRegistry: false 

    server: 
    port: 1111 # HTTP (Tomcat) port 
+2

Если вы не хотите использовать технологию удаленного доступа, тогда не используйте микросервисы. С eureka вы получаете ip/port для обслуживания, и вам нужно как-то называть его. Либо используйте Spring Remoting (RMI, HTTP и т. Д.), Либо используя REST. Если это не то, что вы хотите, то микросервисы не для вас. –

+0

, так как я получаю данные о местоположении от eureka, я могу назвать его. Но его не нужно, я должен создать удаленный объект obj, как в случае rmi.That удаленный obj вызывает внутренний метод lookum() rmi.Cant, я создаю свой собственный поиск() и назвать это? –

+0

Действительно ли вы прочитали главу о переходе к весне? Судя по тому, что вы здесь объясните, у вас нет ... –

ответ

1

Я бы сказал, что Spring Cloud guide on this - лучшая отправная точка.

Но, короче говоря, поскольку вы используете Spring Cloud (то есть @EnableDiscoveryClient), я лично использовал поддержку фейерверков Spring Cloud для выполнения вызова. Это сделает фактический поиск службы поиска (eureka) и вызовы HTTP для вас.

Во-первых, вы будете нуждаться в @EnableFeignClients аннотации на вашем классе конфигурации, и следующую зависимости (в предположении, Maven):

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-feign</artifactId> 
</dependency> 

Затем в вашем проекте службы пользователя, вы можете добавить следующий интерфейс:

@FeignClient("add-service") 
public interface AddServiceClient { 

    @RequestMapping(method = RequestMethod.POST, value = "/add/{x}/{y}", consumes="application/json") 
    int addNumbers(@PathVariable("x") int x, @PathVariable("y") int y); 

} 

Это в основном это действительно. Вы можете autowire AddServiceClient и использовать его:

@Autowired 
private AddServiceClient addServiceClient; 

void someMethod() { 
    addServiceClient.addNumbers(2, 4); 
} 

Это предполагает, что вы подвергаете/добавить/{х}/{у} в качестве конечной точки POST в надстройку службы (например, через @RestController и @RequestMapping)

EDIT: Извините, я просто видел, где вы сказали, что REST будет дорогостоящим. Почему вы так думаете? :)

+0

Его мое требование proj использовать REST как последний вариант. Я не знаю точной причины, поэтому я пытаюсь добиться этого без REST.With REST его очень легко, хотя, играя с аннотациями –

+0

Ok ..После обсуждения с моей командой он заключил, что в REST-вызове каждый раз создается новое соединение, поэтому к сервису нужно обращаться каждый раз с помощью нового экземпляра. Мне нужно использовать Spring boot, eureka server и http protocol wthout REST для доступа к сервису. –

+0

Относительно «каждый раз, когда создается новое соединение, для которого каждый раз нужно обращаться к сервису с помощью нового экземпляра» - uhm, не уверен, что я неправильно понял, хотя все весенние бобы (например, службы) по умолчанию являются одиночными, поэтому ничего нового не должно быть создан? Я лично считаю, что удаленные объекты и/или rmi будут на самом деле более ресурсоемкими, чем довольно легкий REST-процесс. –

Смежные вопросы