# Packages

No description provided by the author

# README

Jet —— Hyperf RPC Client

Introduction

This is an RPC client compatible with Hyperf, supporting remote procedure calls (RPC) via JSON-RPC. Support for middleware, ID generation, path generation, and other features.

Usage Example

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/go-kratos-ecosystem/components/v2/hyperf/jet"
)

func main() {
	// create transporter
	transport, err := jet.NewHTTPTransporter(
		jet.WithHTTPTransporterAddr("http://localhost:8080/"), // http server address
	)
	if err != nil {
		panic(err)
	}

	// create client
	client, err := jet.NewClient(
		jet.WithService("Example/User/MoneyService"), // service name
		jet.WithTransporter(transport),
		jet.WithMiddleware(recovery(), logger()), // with middleware(if you need)
	)
	if err != nil {
		panic(err)
	}

	// use middleware(if you need)
	client.Use(recovery(), logger()) // use middleware(if you need)

	// call service
	var balance float64
	if err := client.Invoke(context.Background(), "getBalance", []any{1006}, &balance); err != nil {
		panic(err)
	}

	log.Println(balance)

	// call service with middleware(if you need)
	if err := client.Invoke(context.Background(), "getBalance", []any{1006}, &balance, recovery(), logger()); err != nil {
		panic(err)
	}
}

func recovery() jet.Middleware {
	return func(next jet.Handler) jet.Handler {
		return func(ctx context.Context, client *jet.Client, name string, request any) (response any, err error) {
			defer func() {
				if r := recover(); r != nil {
					log.Println("recovered:", r)
					err = fmt.Errorf("%v", r)
				}
			}()
			return next(ctx, client, name, request)
		}
	}
}

func logger() jet.Middleware {
	return func(next jet.Handler) jet.Handler {
		return func(ctx context.Context, client *jet.Client, name string, request any) (response any, err error) {
			log.Println("service", client.GetService(), "name:", name, "request:", request, "response:", response, "error:", err)
			return next(ctx, client, name, request)
		}
	}
}