A ready-to-use and simple go-micro router
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
René Jochum 13e8e625af
Fix the LICENSE
2 years ago
cmd/microrouterd Fix routes having the same method, update docs, update build 2 years ago
docker/router Fix routes having the same method, update docs, update build 2 years ago
internal Fix routes having the same method, update docs, update build 2 years ago
.drone.yml Fix routes having the same method, update docs, update build 2 years ago
.gitignore Rename ServerConfig->RouterConfig, smaller build fixes 2 years ago
LICENSE Fix the LICENSE 2 years ago
LICENSE.spdx Move to jochum.dev 2 years ago
README.md Update readme, pt2 2 years ago
Taskfile.yml Fix routes having the same method, update docs, update build 2 years ago
go.mod Fix routes having the same method, update docs, update build 2 years ago
go.sum Fix routes having the same method, update docs, update build 2 years ago
handler.go Fix routes having the same method, update docs, update build 2 years ago
method.go Fix routes having the same method, update docs, update build 2 years ago
route.go Fix routes having the same method, update docs, update build 2 years ago

README.md

Build Status

router

A dynamic router (API Gatway) for go-micro.

It looks for services that host "proto/routerclientpb/routerclientpb.RouterClientService" and ask's them for routes/endpoints, then it registers that endpoints via a proxy method within gin.

Caveats

  • gin doesn't allow to delete routes, so if you want to delete a route you have to restart go-micro/router.

Usage

docker-compose:

services:
  router:
    restart: unless-stopped
    image: docker.io/jomicro/router:0.2.3
    environment:
      - MICRO_TRANSPORT=grpc
      - MICRO_REGISTRY=nats
      - MICRO_REGISTRY_ADDRESS=nats:4222
      - MICRO_BROKER=nats
      - MICRO_BROKER_ADDRESS=nats:4222
      - SERVER_ADDRESS=:8080
      - LOG_LEVEL=info
    ports:
      - 8080:8080
    depends_on:
      - nats

See cmd/microrouterd/plugins.go for a list of availabel transports, registries and brokers.

Todo

  • Add (more) examples.
  • Add support for Streams / WebSockets.
  • Add support for debug.
  • Maybe add optional support for auth.

Integration examples

Have a look at internalService or the author's FOSS project microlobby.

Here's some code from the microlobby project

import (
    "jochum.dev/jo-micro/router"
    "github.com/urfave/cli/v2"
    "go-micro.dev/v4"
    "wz2100.net/microlobby/shared/proto/authservicepb/v1"
)

func main() {
    service := micro.NewService()

    service.Init(
        micro.Action(func(c *cli.Context) error {
            s := service.Server()
            r := router.NewHandler(
                config.RouterURI,
                router.NewRoute(
                    router.Method(router.MethodGet),
                    router.Path("/"),
                    router.Endpoint(authservicepb.AuthV1Service.UserList),
                    router.Params("limit", "offset"),
                ),
                router.NewRoute(
                    router.Method(router.MethodPost),
                    router.Path("/login"),
                    router.Endpoint(authservicepb.AuthV1Service.Login),
                ),
                router.NewRoute(
                    router.Method(router.MethodPost),
                    router.Path("/register"),
                    router.Endpoint(authservicepb.AuthV1Service.Register),
                ),
                router.NewRoute(
                    router.Method(router.MethodPost),
                    router.Path("/refresh"),
                    router.Endpoint(authservicepb.AuthV1Service.Refresh),
                ),
                router.NewRoute(
                    router.Method(router.MethodDelete),
                    router.Path("/:userId"),
                    router.Endpoint(authservicepb.AuthV1Service.UserDelete),
                    router.Params("userId"),
                ),
                router.NewRoute(
                    router.Method(router.MethodGet),
                    router.Path("/:userId"),
                    router.Endpoint(authservicepb.AuthV1Service.UserDetail),
                    router.Params("userId"),
                ),
                router.NewRoute(
                    router.Method(router.MethodPut),
                    router.Path("/:userId/roles"),
                    router.Endpoint(authservicepb.AuthV1Service.UserUpdateRoles),
                    router.Params("userId"),
                ),
            )
            r.RegisterWithServer(s)
        }
    )
}

Developers corner

Build podman/docker image

Prerequesits

Build

task

Remove everything

task rm

Authors

License

Its dual licensed:

  • Apache-2.0
  • GPL-2.0-or-later