我必须将我的项目实现为微服务阶段。为此,我正在使用添加两个没有的Spring Boot做一个示例应用程序。我有三项服务。这是我的registration-server.yml。同样我有account-server.yml
和user-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
答案 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
)