Skip to content

Commit 3070869

Browse files
committed
adding feign clients and initial service structure
1 parent b12941f commit 3070869

File tree

5 files changed

+118
-0
lines changed

5 files changed

+118
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.baeldung.cloud.openfeign.completablefuturefeignclient;
2+
3+
import org.springframework.cloud.openfeign.FeignClient;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RequestMethod;
6+
import org.springframework.web.bind.annotation.RequestParam;
7+
8+
import java.util.List;
9+
10+
@FeignClient(name = "paymentClient", url = "http://payments-api.com")
11+
public interface PaymentMethodClient {
12+
13+
@RequestMapping(method = RequestMethod.GET, value = "/payments/methods")
14+
List<String> getAvailablePaymentMethods(@RequestParam(name = "site_id") String siteId);
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baeldung.cloud.openfeign.completablefuturefeignclient;
2+
3+
public class Purchase {
4+
5+
private String siteId;
6+
private long orderId;
7+
8+
public Purchase(String siteId, long orderId) {
9+
this.siteId = siteId;
10+
this.orderId = orderId;
11+
}
12+
13+
public String getSiteId() {
14+
return siteId;
15+
}
16+
17+
public void setSiteId(String siteId) {
18+
this.siteId = siteId;
19+
}
20+
21+
public long getOrderId() {
22+
return orderId;
23+
}
24+
25+
public void setOrderId(long orderId) {
26+
this.orderId = orderId;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baeldung.cloud.openfeign.completablefuturefeignclient;
2+
3+
import org.springframework.stereotype.Service;
4+
5+
import java.util.List;
6+
import java.util.concurrent.CompletableFuture;
7+
8+
@Service
9+
public class PurchaseService {
10+
11+
private final PaymentMethodClient paymentMethodClient;
12+
private final ReportClient reportClient;
13+
14+
public PurchaseService(PaymentMethodClient paymentMethodClient, ReportClient reportClient) {
15+
this.paymentMethodClient = paymentMethodClient;
16+
this.reportClient = reportClient;
17+
}
18+
19+
public void executePurchase(Purchase purchase) {
20+
21+
ReportRequest report = new ReportRequest("Creating purchase for order", purchase.getOrderId(), purchase.getSiteId());
22+
23+
CompletableFuture.allOf(
24+
CompletableFuture.supplyAsync(() -> paymentMethodClient.getAvailablePaymentMethods(purchase.getSiteId())),
25+
CompletableFuture.runAsync(() -> reportClient.sendReport(report))
26+
);
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.baeldung.cloud.openfeign.completablefuturefeignclient;
2+
3+
import org.springframework.cloud.openfeign.FeignClient;
4+
import org.springframework.web.bind.annotation.RequestBody;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RequestMethod;
7+
8+
@FeignClient(name = "reportClient", url = "http://reports-api.com")
9+
public interface ReportClient {
10+
11+
@RequestMapping(method = RequestMethod.POST, value = "/reports")
12+
void sendReport(@RequestBody ReportRequest reportRequest);
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.cloud.openfeign.completablefuturefeignclient;
2+
3+
public class ReportRequest {
4+
5+
private String content;
6+
private long orderId;
7+
private String siteId;
8+
9+
public ReportRequest(String content, long orderId, String siteId) {
10+
this.content = content;
11+
this.orderId = orderId;
12+
this.siteId = siteId;
13+
}
14+
15+
public String getContent() {
16+
return content;
17+
}
18+
19+
public void setContent(String content) {
20+
this.content = content;
21+
}
22+
23+
public long getOrderId() {
24+
return orderId;
25+
}
26+
27+
public void setOrderId(long orderId) {
28+
this.orderId = orderId;
29+
}
30+
31+
public String getSiteId() {
32+
return siteId;
33+
}
34+
}

0 commit comments

Comments
 (0)