Skip to content

An OpenFeign Client for Dapr Invokes #1294

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 17 commits into
base: master
Choose a base branch
from

Conversation

lony2003
Copy link

@lony2003 lony2003 commented Apr 2, 2025

Description

A OpenFeign Client and it's AutoConfiguration using Dapr Invoke APIs.

Splited into two librarys, dapr-openfeign-client is the pure client of OpenFeign, and dapr-spring-openfeign is the plugin of Spring Cloud OpenFeign.

Currently only HTTP Invoke Method and Invoke Binding supported, and Invoke Binding is not always recommend to use this client, depends on what binding component is.

Issue reference

this PR will close: #1181

Checklist

Please make sure you've completed the relevant tasks for this PR, out of the following list:

  • Code compiles correctly
  • Created/updated tests
  • Extended the documentation

lony2003 added 6 commits April 1, 2025 21:58
A OpenFeign Client and it's AutoConfiguration using Dapr Invoke APIs.

Splited into two librarys, dapr-openfeign-client is the pure client of OpenFeign, and dapr-spring-openfeign is the plugin of Spring Cloud OpenFeign.

Currently only HTTP Invoke Method and Invoke Binding supported, and Invoke Binding is not always recommend to use this client, depends on what binding component is.

Signed-off-by: lony2003 <[email protected]>
A OpenFeign Client and it's AutoConfiguration using Dapr Invoke APIs.

Splited into two librarys, dapr-openfeign-client is the pure client of OpenFeign, and dapr-spring-openfeign is the plugin of Spring Cloud OpenFeign.

Currently only HTTP Invoke Method and Invoke Binding supported, and Invoke Binding is not always recommend to use this client, depends on what binding component is.

Signed-off-by: lony2003 <[email protected]>
A OpenFeign Client and it's AutoConfiguration using Dapr Invoke APIs.

Splited into two librarys, dapr-openfeign-client is the pure client of OpenFeign, and dapr-spring-openfeign is the plugin of Spring Cloud OpenFeign.

Currently only HTTP Invoke Method and Invoke Binding supported, and Invoke Binding is not always recommend to use this client, depends on what binding component is.

Signed-off-by: lony2003 <[email protected]>
this example can redirect order request to producer-app. It needs producer-app to run properly.

Signed-off-by: lony2003 <[email protected]>
this test tests the PostgreSQL binding of dapr.

Signed-off-by: lony2003 <[email protected]>
@lony2003 lony2003 requested review from a team as code owners April 2, 2025 12:53
@salaboy
Copy link
Contributor

salaboy commented Apr 2, 2025

I haven't reviewed this yet @lony2003 , but I am more convinced that we need this .. @artur-ciocanu @mcruzdev can you help me to check this PR ?

Fix the example doc to make openfeign app works in mm.py

Signed-off-by: lony2003 <[email protected]>
@salaboy
Copy link
Contributor

salaboy commented Apr 7, 2025

@lony2003 I've just reviewed this PR and it is looking awesome..
I am currently working on testing multiple sidecars using Testcontainers (for service to service invocation) scenarios, so I will probably tag you in those examples when I have them running. I think this PR is ok (as soon as there are no bean conflicts), then we can create some examples in spring-boot-examples showing the feign clients when we can test service to service invocations with multiple sidecars.

…riginal Targeter beans instead of override them.

Signed-off-by: lony2003 <[email protected]>
@lony2003
Copy link
Author

lony2003 commented Apr 7, 2025

@salaboy I have changed the Targeter part to using BeanPostProcesser to handle them, so now no confliects will happen.

Copy link

codecov bot commented Apr 8, 2025

Codecov Report

Attention: Patch coverage is 66.19718% with 72 lines in your changes missing coverage. Please review.

Project coverage is 75.10%. Comparing base (d759c53) to head (46a9f65).
Report is 125 commits behind head on master.

Files with missing lines Patch % Lines
...main/java/io/dapr/feign/DaprInvokeFeignClient.java 74.49% 28 Missing and 10 partials ⚠️
.../spring/openfeign/targeter/DaprClientTargeter.java 0.00% 20 Missing ⚠️
.../targeter/DaprClientTargeterBeanPostProcessor.java 0.00% 6 Missing ⚠️
...feign/autoconfigure/DaprFeignClientProperties.java 61.53% 5 Missing ⚠️
...gboot/examples/openfeign/OpenFeignApplication.java 33.33% 2 Missing ⚠️
...a/io/dapr/springboot/examples/openfeign/Order.java 91.66% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             master    #1294      +/-   ##
============================================
- Coverage     76.91%   75.10%   -1.82%     
- Complexity     1592     1656      +64     
============================================
  Files           145      201      +56     
  Lines          4843     5314     +471     
  Branches        562      575      +13     
============================================
+ Hits           3725     3991     +266     
- Misses          821      997     +176     
- Partials        297      326      +29     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@lony2003 lony2003 requested a review from cicoyle April 8, 2025 05:53
@lony2003
Copy link
Author

lony2003 commented Apr 8, 2025

@cicoyle I have checked all files and add headers for them, and I have solved the problem that makes IT failed. Please re-trigger the CI.

@cicoyle
Copy link
Contributor

cicoyle commented Apr 22, 2025

Hey @lony2003 - thanks, before I can retrigger CI it says there are conflicts needing to be resolved. Mind resolving them locally and pushing? Then we'll be able to proceed 🙏🏻

@lony2003 lony2003 force-pushed the development-openfeign branch from 8580167 to a330ef2 Compare April 23, 2025 01:29
@lony2003 lony2003 force-pushed the development-openfeign branch 4 times, most recently from 8befe0e to 6d1e70a Compare April 23, 2025 04:37
@lony2003 lony2003 force-pushed the development-openfeign branch 3 times, most recently from 3eaa83e to c381e44 Compare April 23, 2025 05:10
… client bean autowired

Job SDK ITs have a daprPreviewClient bean defined, as SpringBoot bean search will first get beans that impl the interface and get all beans that matches the bean's class, when openfeign autowire DaprClient, there is a conflict between daprClient and daprPreviewClient.

Change the AutoConfiguration behavior to make a more strict rule for making AutoConfiguration run

Signed-off-by: lony2003 <[email protected]>
@lony2003 lony2003 force-pushed the development-openfeign branch 4 times, most recently from 00fae6b to bc6d98c Compare April 23, 2025 06:10
… client bean autowired

Job SDK ITs have a daprPreviewClient bean defined, as SpringBoot bean search will first get beans that impl the interface and get all beans that matches the bean's class, when openfeign autowire DaprClient, there is a conflict between daprClient and daprPreviewClient.

Change the AutoConfiguration behavior to make a more strict rule for making AutoConfiguration run

Signed-off-by: lony2003 <[email protected]>
@lony2003
Copy link
Author

@cicoyle conflict solved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use With Feign
3 participants