Compare
Queues and event buses
vs. Graftcode

Keep the broker. Skip the plumbing.

Queues are the right tool for async decoupling. Graftcode's queue plugins keep Kafka or RabbitMQ as the transport — but you call typed methods, not producers and consumers.

/USED BY LEADING COMPANIES

3G TMS
ARC CORE
IBM
Intermodal Tank Transport
NewDoors
First Premier Bank
TotalEnergies
TRUMPF
Stratus
SIEMENS
Nuance
Walter
Tangram
Nevada
BREAS
Statistics Norway
3G TMS
ARC CORE
IBM
Intermodal Tank Transport
NewDoors
First Premier Bank
TotalEnergies
TRUMPF
Stratus
SIEMENS
Nuance
Walter
Tangram
Nevada
BREAS
Statistics Norway
3G TMS
ARC CORE
IBM
Intermodal Tank Transport
NewDoors
First Premier Bank
TotalEnergies
TRUMPF
Stratus
SIEMENS
Nuance
Walter
Tangram
Nevada
BREAS
Statistics Norway

/AT GLANCE

Queues and event buses
vs
Graftcode

Brokers are great for async. The plumbing around them — producers, consumers, schemas, broker SDKs — is what Graftcode removes.

REST
  • Great for async decoupling, buffering and fan-out
  • ...but you write producers, consumers and schemas
  • Each broker has its own SDK and wire format
  • Swapping brokers rewrites your business code
  • Untyped by default; safety is schema-dependent
  • Same typed, local-feeling calls — across 14+ runtimes
  • Expose ordinary methods — no producers, no consumers
  • A plugin owns the channel: Kafka, RabbitMQ, SQS, Pub/Sub
  • Swap broker or topology with zero business-code changes
  • Public methods become MCP tools automatically

/WHY SWITCH

Three reasons teams move from REST

REST is the universal edge contract. For internal service and app calls, its plumbing is pure overhead.

A typed method replacing a queue producer and consumer

No producers, no consumers

Classic queues make you write producer and consumer code and a message schema for every event. Graftcode's plugin turns ordinary methods into queued calls.

Broker swap handled by a Graftcode plugin

Swap brokers without a rewrite

Changing from RabbitMQ to Kafka - or the topology - rewrites business code. With Graftcode the plugin owns the channel; your methods don't change.

Compile-time types across a message broker

Typed, not silently broken

Rename a field or change its type and consumers break at runtime - no compile-time warning. Graftcode keeps strong typing end to end across the broker.

/SHOW, DON'T TELL

Same event. Producer + consumer vs a method.

Publishing and handling one event — the broker wiring vs a typed method.

Queues
  1. producer: serialize + publish
    var body = Encoding.UTF8.GetBytes(
      JsonSerializer.Serialize(new UserCreated { Id = 42 }));
    channel.BasicPublish("users", "user.created", body);
  2. consumer: subscribe + handle
    consumer.Received += (_, ea) => {
      var msg = JsonSerializer.Deserialize<UserCreated>(ea.Body);
      Handle(msg); // hope the schema still matches
    };
    channel.BasicConsume("users", consumer);
GRAFTCODE
  1. expose an ordinary method
    public class Users {
      public void Created(User user) => _handle(user);
    }
  2. Install the Graft & call
    from acme_users import Users
    
    Users.created(user)
    # ^ typed, async. swap the broker in config — not here.

Same event, fully typed. Queues need a producer, a consumer and a schema- Graftcode needs a method and a plugin.

/FEATURE MATRIX

The honest, line-by-line comparison

CapabilityREST
PROGRAMMING MODEL
Call with Strongly Typed Methods
[×] NO
Regular Exception support
[×] NO
Complex DTOs & arrays passed by value in one call
[✓] YES
PROGRAMMING DEPENDENCIES & CONTRACTS
No additional SDK
[×] NO
No contract files
[×] NO
Use remote modules as dependencies
[×] NO
TOPOLOGY & TRANSPORT
Monolith <-> Microservices switch by configuration
[×] NO
Switch remote <-> in-memory with config only
[×] NO
TOPOLOGY & TRANSPORT
Same programming model for queues / event buses
[-] PARTIAL
Full streaming
[-] PARTIAL
Automatic Native MCP
[×] NO
REST compared with Graftcode
CapabilityRESTGraftcode
PROGRAMMING MODEL
Call with Strongly Typed Methods[×] NO[✓] YES
Regular Exception support[×] NO[✓] YES
Complex DTOs & arrays passed by value in one call[✓] YES[✓] YES
PROGRAMMING DEPENDENCIES & CONTRACTS
No additional SDK[×] NO[✓] YES
No contract files[×] NO[✓] YES
Use remote modules as dependencies[×] NO[✓] YES
TOPOLOGY & TRANSPORT
Monolith <-> Microservices switch by configuration[×] NO[✓] YES
Switch remote <-> in-memory with config only[×] NO[✓] YES
TOPOLOGY & TRANSPORT
Same programming model for queues / event buses[-] PARTIAL[✓] Via plugins
Full streaming[-] PARTIAL[✓] YES
Automatic Native MCP[×] NO[✓] YES

/BY THE NUMBERS

The payoff, in numbers

60%

less code for AI to touch

1/8

of REST/RPC overhead via Hypertube™

20

coding languages supported

10

package managers supported

/FAQS

Before you ask

  • No. Brokers own async decoupling, buffering, replay and fan-out. Graftcode's queue plugin sits on top of Kafka, RabbitMQ or SQS so you call typed methods instead of writing producers and consumers - the broker still does the work.

/COMMUNITY

Join grafters community

Many developers are loving Graftcode and what it brings to them.

Community member avatar 1-1
Community member avatar 1-2
Community member avatar 1-3
Community member avatar 1-4
Community member avatar 1-5
Community member avatar 1-6
Community member avatar 1-7
Community member avatar 1-8
Community member avatar 1-9
Community member avatar 1-10
Community member avatar 1-11
Community member avatar 1-12
Community member avatar 1-13
Community member avatar 1-14
Community member avatar 1-15
Community member avatar 1-16
Community member avatar 1-17
Community member avatar 1-18
Community member avatar 1-19
Community member avatar 1-20
Community member avatar 1-21
Community member avatar 1-22
Community member avatar 1-23
Community member avatar 1-24
Community member avatar 1-25
Community member avatar 1-26
Community member avatar 2-1
Community member avatar 2-2
Community member avatar 2-3
Community member avatar 2-4
Community member avatar 2-5
Community member avatar 2-6
Community member avatar 2-7
Community member avatar 2-8
Community member avatar 2-9
Community member avatar 2-10
Community member avatar 2-11
Community member avatar 2-12
Community member avatar 2-13
Community member avatar 2-14
Community member avatar 2-15
Community member avatar 2-16
Community member avatar 2-17
Community member avatar 2-18
Community member avatar 2-19
Community member avatar 2-20
Community member avatar 2-21
Community member avatar 2-22
Community member avatar 2-23
Community member avatar 2-24
Community member avatar 2-25
Community member avatar 2-26
Community member avatar 3-1
Community member avatar 3-2
Community member avatar 3-3
Community member avatar 3-4
Community member avatar 3-5
Community member avatar 3-6
Community member avatar 3-7
Community member avatar 3-8
Community member avatar 3-9
Community member avatar 3-10
Community member avatar 3-11
Community member avatar 3-12
Community member avatar 3-13
Community member avatar 3-14
Community member avatar 3-15
Community member avatar 3-16
Community member avatar 3-17
Community member avatar 3-18
Community member avatar 3-19
Community member avatar 3-20
Community member avatar 3-21
Community member avatar 3-22
Community member avatar 3-23
Community member avatar 3-24
Community member avatar 3-25
Community member avatar 3-26

“Graftcode appears to be an exceptionally useful platform. Its key value proposition is allowing developers to concentrate on core business requirements instead of tedious service integration tasks. I believe the concept of beginning with a monolithic structure and then having the option to dynamically transition to a microservice architecture will prove to be extremely valuable.”

Maciej_e$

GitHub

Start and contribute to the project on GitHub.

JOIN
LinkedIn

Connect with us on LinkedIn.

JOIN
Twitter / X

Follow along on X.

JOIN
Discord

Join the conversation on Discord.

JOIN

Your queue, minus the plumbing.

No producer code, no consumer code, no message schema-just typed methods over the broker you already run.