使用Spring Boot访问微服务

时间:2016-05-26 10:09:12

标签: java spring spring-boot microservices

我必须将我的项目实现为微服务阶段。为此,我正在使用添加两个没有的Spring Boot做一个示例应用程序。我有三项服务。这是我的registration-server.yml。同样我有account-server.ymluser-service.yml。我想在没有RMI概念的情况下使用add()来调用UserService.java,因为我使用的是Spring Boot。此外,我不想要REST调用,因为它对我的项目来说代价很高。如何在lookup()中手动编写UserService的代码,以便它可以调用Adder?

@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

1 个答案:

答案 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);

}

基本上它确实如此。然后,您可以自动装配AddServiceClient并使用它:

@Autowired
private AddServiceClient addServiceClient;

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

这假设您在添加服务中公开/添加/ {x} / {y}作为POST端点(例如,通过@RestController@RequestMapping

编辑:对不起,我刚才看到你说REST的成本很高。为什么你这么想? :)