2016-05-26 9 views
0

マイクロサービスアーチとしてプロジェクトを実装する必要があります。そのために私は2つのnoを追加してSpring Bootを使って1つのサンプルアプリをやっています。私は3つのサービスを持っています。ここに私の登録server.ymlがあります。同様にaccount-server.ymluser-service.ymlがあります。私はadd()UserService.javaを使ってRMIの概念なしで呼びたいと思っています。なぜなら私はSpring Bootを使用しているからです。また、私のプロジェクトではコストがかかるので、RESTコールを望んでいません。 lookup()のコードを手動でUserServiceに書き込んで、それでAdderを呼び出せますか?Springブートを使用してマイクロサービスにアクセス

@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

リモート処理技術を使用したくない場合は、マイクロサービスを使用しないでください。ユーレカを使うと、サービスのためのIP /ポートを手に入れ、何とかそれを呼び出す必要があります。 Spring Remoting(RMI、HTTPなど)を使用するか、RESTを使用します。それがあなたが望むものでないならば、マイクロサービスはあなたのためではありません。 –

+0

私はユーレカから位置の詳細を取得しているので、私はそれを呼び出すことができます。しかし、必要はありません私はrmiの場合のようにリモートobjを作成する必要があります。リモートobjはrmi.Cantの内部ルックアップ()それを呼びますか? –

+0

実際に春のリモーティングの章を読んでいますか?あなたがここで説明したことから判断すると、あなたはそうではありません... –

答えて

1

私はSpring Cloud guide on thisが最良の出発点であると言います。

要するに、Spring Cloud(つまり@EnableDiscoveryClient)を使用しているため、私はSpringクラウドのfeignクライアントサポートを使用して呼び出しを実行します。これにより、実際のディスカバリサービス(ユーレカ)ルックアップとHTTPコールが実行されます。

まず、あなたのconfigクラスの@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をautowireし、それを使用することができます。

@Autowired 
private AddServiceClient addServiceClient; 

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

これは、あなたが公開することを前提として/

(例えば@RestController@RequestMapping経由)あなたのアドオンサービス内POSTエンドポイントとして/ {X}/{Y}を追加編集:申し訳ありませんが、私はちょうどあなたがRESTが高価かもしれないと言いました。なぜそう思うの? :)

+0

最後のオプションとしてRESTを使用するための私のproj要件。正確な理由はわかりませんので、REST.With RESTを使わずにこれを達成しようとしています。注釈を付けて再生することで簡単です。 –

+0

私のチームとの議論の後、RESTコール以降、新しい接続が作成されるたびに結論づけられました。新しいインスタンスで毎回サービスにアクセスする必要があります。サービスにアクセスするために、春のブート、ユーリカのサーバー、HTTPプロトコルのRESTを使用する必要があります。 –

+0

「毎回新しい接続が作成されるたびに、新しいインスタンスで毎回サービスにアクセスする必要があります」 - uhm、デフォルトではすべてのSpring Bean(例:サービス)がシングルトンであると誤解されているかどうかわからないので、作成した?私は個人的には、リモートオブジェクトやrmiが実際にはかなり軽量なRESTプロセスよりもリソース重視だと思うでしょう。 –

関連する問題