1kasa commented on PR #2941:
URL: https://github.com/apache/dubbo-go/pull/2941#issuecomment-3061013099

   test case:
   Due to the length of this article, let's take filter as an example to show 
that the serviecs configuration under the provider is effective.
   
   client:
   ```
   package main
   
   import (
        "context"
   
        "dubbo.apache.org/dubbo-go/v3"
        _ "dubbo.apache.org/dubbo-go/v3/imports"
        greet "github.com/apache/dubbo-go-samples/config_yaml/proto"
        "github.com/dubbogo/gost/log/logger"
   )
   
   var svc = new(greet.GreetServiceImpl)
   
   func main() {
        greet.SetConsumerService(svc)
        if err := dubbo.Load(); err != nil {
                panic(err)
        }
        req, err := svc.Greet(context.Background(), &greet.GreetRequest{Name: 
"ConfigTest"})
        if err != nil || req.Greeting != "ConfigTest-Success" {
                panic(err)
        }
        logger.Info("ConfigTest successfully")
   }
   ```
   client_my_filter:
   ```
   package main
   
   import (
        "context"
        "fmt"
   )
   
   import (
        "dubbo.apache.org/dubbo-go/v3/common/extension"
        "dubbo.apache.org/dubbo-go/v3/filter"
        "dubbo.apache.org/dubbo-go/v3/protocol"
   )
   
   func init() {
        extension.SetFilter("myClientFilter", NewMyClientFilter)
   }
   
   func NewMyClientFilter() filter.Filter {
        return &MyClientFilter{}
   }
   
   type MyClientFilter struct {
   }
   
   func (f *MyClientFilter) Invoke(ctx context.Context, invoker 
protocol.Invoker, invocation protocol.Invocation) protocol.Result {
        fmt.Println("MyClientFilter Invoke is called, method Name = ", 
invocation.MethodName())
        invocation.SetAttachment("request-key1", "request-value1")
        invocation.SetAttachment("request-key2", []string{"request-value2.1", 
"request-value2.2"})
        return invoker.Invoke(ctx, invocation)
   }
   func (f *MyClientFilter) OnResponse(ctx context.Context, result 
protocol.Result, invoker protocol.Invoker, protocol protocol.Invocation) 
protocol.Result {
        fmt.Println("MyClientFilter OnResponse is called")
        fmt.Println("result attachment = ", result.Attachments())
        return result
   }
   
   ```
   dubbogo.yml:
   ```
   # dubbo client yaml configure file
   dubbo:
     registries:
       demoZK:
         protocol: zookeeper
         timeout: 3s
         address: 127.0.0.1:2181
     consumer:
       references:
         GreetServiceImpl:
           protocol: tri
           interface: com.apache.dubbo.sample.Greeter
           registry: demoZK
           retries: 3
           timeout: 3000
           filter: myClientFilter
   ```
   server:
   ```
   package main
   
   import (
        "context"
        "errors"
        "fmt"
   
        "dubbo.apache.org/dubbo-go/v3"
        _ "dubbo.apache.org/dubbo-go/v3/imports"
        greet "github.com/apache/dubbo-go-samples/config_yaml/proto"
   )
   
   type GreetTripleServer struct {
   }
   
   func (srv *GreetTripleServer) Greet(ctx context.Context, req 
*greet.GreetRequest) (*greet.GreetResponse, error) {
        name := req.Name
        if name != "ConfigTest" {
                errInfo := fmt.Sprintf("name is not right: %s", name)
                return nil, errors.New(errInfo)
        }
   
        resp := &greet.GreetResponse{Greeting: req.Name + "-Success"}
        return resp, nil
   }
   
   func main() {
        greet.SetProviderService(&GreetTripleServer{})
        if err := dubbo.Load(); err != nil {
                panic(err)
        }
        select {}
   }
   ```
   server_my_filter:
   ```
   package main
   
   import (
        "context"
        "fmt"
   )
   
   import (
        "dubbo.apache.org/dubbo-go/v3/common/extension"
        "dubbo.apache.org/dubbo-go/v3/filter"
        "dubbo.apache.org/dubbo-go/v3/protocol"
   )
   
   func init() {
        extension.SetFilter("myServerFilter", NewMyServerFilter)
   }
   
   func NewMyServerFilter() filter.Filter {
        return &MyServerFilter{}
   }
   
   type MyServerFilter struct {
   }
   
   func (f *MyServerFilter) Invoke(ctx context.Context, invoker 
protocol.Invoker, invocation protocol.Invocation) protocol.Result {
        fmt.Println("MyServerFilter Invoke is called, method Name = ", 
invocation.MethodName())
        fmt.Printf("request attachments = %s\n", invocation.Attachments())
        return invoker.Invoke(ctx, invocation)
   }
   func (f *MyServerFilter) OnResponse(ctx context.Context, result 
protocol.Result, invoker protocol.Invoker, protocol protocol.Invocation) 
protocol.Result {
        fmt.Println("MyServerFilter OnResponse is called")
        myAttachmentMap := make(map[string]interface{})
        myAttachmentMap["key1"] = "value1"
        myAttachmentMap["key2"] = []string{"value1", "value2"}
        result.SetAttachments(myAttachmentMap)
        return result
   }
   
   ```
   dubbogo.yml:
   ```
   # dubbo server yaml configure file
   dubbo:
     registries:
       demoZK:
         protocol: zookeeper
         timeout: 10s
         address: 127.0.0.1:2181
     protocols:
       tripleProtocol:
         name: tri
         port: 20000
     provider:
       services:
         GreetTripleServer:
           interface: com.apache.dubbo.sample.Greeter
           filter: myServerFilter
   
   ```
   result:
   The following two pictures show that the server filter and interface can be 
obtained normally.
   <img width="1379" height="681" alt="image" 
src="https://github.com/user-attachments/assets/273b4c3f-6ff1-4c5a-af67-103c46f5b67f";
 />
   <img width="1351" height="497" alt="image" 
src="https://github.com/user-attachments/assets/e1cb3bee-6144-497b-b3dc-3be71a5d03e5";
 />
   client


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@dubbo.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@dubbo.apache.org
For additional commands, e-mail: notifications-h...@dubbo.apache.org

Reply via email to