All Projects → muoncore → muon-java

muoncore / muon-java

Licence: LGPL-3.0 license
Muon Core for the JVM. APIs and Microservices taken to the next level

Programming Languages

java
68154 projects - #9 most used programming language
groovy
2714 projects

Projects that are alternatives of or similar to muon-java

Watermill
Building event-driven applications the easy way in Go.
Stars: ✭ 3,504 (+19366.67%)
Mutual labels:  events, reactive, event-sourcing
eventide-postgres
Event Sourcing and Microservices Stack for Ruby
Stars: ✭ 92 (+411.11%)
Mutual labels:  reactive, messaging, event-sourcing
Pitstop
This repo contains a sample application based on a Garage Management System for Pitstop - a fictitious garage. The primary goal of this sample is to demonstrate several software-architecture concepts like: Microservices, CQRS, Event Sourcing, Domain Driven Design (DDD), Eventual Consistency.
Stars: ✭ 708 (+3833.33%)
Mutual labels:  ddd, event-sourcing, microservices-architecture
Resolve
Full stack CQRS, DDD, Event Sourcing framework for Node.js
Stars: ✭ 460 (+2455.56%)
Mutual labels:  reactive, ddd, event-sourcing
OpenCQRS
.NET Standard framework to create simple and clean design. Advanced features for DDD, CQRS and Event Sourcing.
Stars: ✭ 546 (+2933.33%)
Mutual labels:  events, ddd, event-sourcing
Kledex
.NET Standard framework to create simple and clean design. Advanced features for DDD, CQRS and Event Sourcing.
Stars: ✭ 502 (+2688.89%)
Mutual labels:  events, ddd, event-sourcing
delta
DDD-centric event-sourcing library for the JVM
Stars: ✭ 15 (-16.67%)
Mutual labels:  reactive, ddd, event-sourcing
Pos
Sample Application DDD, Reactive Microservices, CQRS Event Sourcing Powered by DERMAYON LIBRARY
Stars: ✭ 207 (+1050%)
Mutual labels:  reactive, event-sourcing, microservices-architecture
CQELight
CQELight is an entreprise grade extensible and customisable framework for creating software with CQRS, DDD & Event Sourcing patterns
Stars: ✭ 21 (+16.67%)
Mutual labels:  events, ddd, event-sourcing
Event Sourcing Cqrs Examples
Event Sourcing and CQRS in practice.
Stars: ✭ 265 (+1372.22%)
Mutual labels:  events, ddd, event-sourcing
Goes
Go Event Sourcing made easy
Stars: ✭ 144 (+700%)
Mutual labels:  events, ddd, event-sourcing
Cqrs Clean Eventual Consistency
CQRS, using Clean Architecture, multiple databases and Eventual Consistency
Stars: ✭ 247 (+1272.22%)
Mutual labels:  events, ddd
Event Driven Spring Boot
Example Application to demo various flavours of handling domain events in Spring Boot
Stars: ✭ 194 (+977.78%)
Mutual labels:  events, event-sourcing
Library
This is a project of a library, driven by real business requirements. We use techniques strongly connected with Domain Driven Design, Behavior-Driven Development, Event Storming, User Story Mapping.
Stars: ✭ 2,685 (+14816.67%)
Mutual labels:  events, ddd
es-emergency-call
Struggling with CQRS, A+ES, DDD? We can help you!
Stars: ✭ 26 (+44.44%)
Mutual labels:  ddd, event-sourcing
awesome-software-architecture
A curated list of awesome articles, videos, and other resources to learn and practice software architecture, patterns, and principles.
Stars: ✭ 1,594 (+8755.56%)
Mutual labels:  ddd, microservices-architecture
tactical-ddd
lightweight helpers that I find myself implementing over and over again related to DDD/Event Sourcing tactical patterns, such as Value Objects, Entities, AggregateRoots, EntityIds etc...
Stars: ✭ 33 (+83.33%)
Mutual labels:  ddd, event-sourcing
CleanArchitecture
Clean Architecture Solution for .NET 5
Stars: ✭ 18 (+0%)
Mutual labels:  ddd, event-sourcing
tardis
Event sourcing toolkit
Stars: ✭ 35 (+94.44%)
Mutual labels:  events, event-sourcing
Eventflow
Async/await first CQRS+ES and DDD framework for .NET
Stars: ✭ 1,932 (+10633.33%)
Mutual labels:  events, ddd

Master Build

Stable

Snapshots

Muon Core - Java

This repo contains the JVM implementation of Muon Core.

What is Muon?

Microservices today are optimised for building systems that can continue to change as you need them to. The achieve this, you decompose an application into its component parts, then recompose it back together again using some form of integration technology. The most common form of integration today is RPC based, whether HTTP, gRPC or one of its friends.

RPC is a fairly simplistic model for integration, with well known flaws and foibles. The other options, messaging and event collaboration are much harder to get started with, and so are often avoided until the "v2 rewrite". Muon lets you adopt messaging and events from the start of a project, by making it easy to do the right thing with them.

Muon is fully polyglot, give you very well defined, easy to use apis that take advantage of messaging, and eventing, to recompose your distributed system in highly performant, rich communication styles, beyond RPC.

What is Muon Core?

Muon is a modular system, allowing it to be easily extended to take advantage of the best of breed technologies and leverage what you may call "legacy", giving it a new lease of life and protecting your investment.

Muon Core is the library that defines the central programming model of the system. It creates channel based communicaiton between microservices, enabling message based communication to happen. Each runtime we support has its own implementation of Muon Core. This repository is for the JVM.

It can be extended by adding one of more of:-

  • Protocol Stacks - The most important extension. This defines a messaging interaction between systems, and gives it an easy to use, language idiomatic API for you to use.

  • Transports - Take advantage of different integration technologies, service meshes, brokers. These are all enabled by a network transport.

  • Discovery - Enable a Muon system to integrate with your existing infrastructure and locate other systems across your deployment.

  • Codec - Convert objects for transport and enable defining of Schemas for client side validation. Not often extended, but available. We currently support JSON and Avro.

Using Muon Java

To use Muon, you need to use Muon Core, a transport, a discovery and one or more protocol stacks.

A minimal gradle import looks like this.

repositories {
    jcenter()
    maven { url 'https://simplicityitself.artifactoryonline.com/simplicityitself/muon' }
    maven { url 'https://simplicityitself.artifactoryonline.com/simplicityitself/muon-snapshot' }
}

dependencies {
    compile "io.muoncore:muon-core:7.3.0-SNAPSHOT"
    compile "io.muoncore:muon-transport-amqp:0.0.1-SNAPSHOT"
    compile "io.muoncore:muon-discovery-amqp:0.0.1-SNAPSHOT"
    compile "io.muoncore.protocol:stack-rpc:0.0.1-SNAPSHOT"
}

You can then create a new instance of Muon with the Discovery and Transport activated. This will appear on the network

Setting this up is somewhat specific to the transport and discovery in question. Assuming AMQP (as above), the creation looks similar to.

AutoConfiguration config = MuonConfigBuilder.withServiceIdentifier("my-service").withTags("awesome")
                .addWriter(c -> {
                    c.getProperties().setProperty(
                            "muon.transport.factories",
                            "io.muoncore.transport.amqp.AmqpMuonTransportFactory");

                    c.getProperties().put("amqp.transport.url", "amqp://muon:microservices@localhost");

                    c.getProperties().setProperty(
                            "muon.discovery.factories",
                            "io.muoncore.discovery.amqp.AmqpDiscoveryFactory");

                    c.getProperties().put("amqp.discovery.url", "amqp://muon:microservices@localhost");
                }).build();

Muon muon = MuonBuilder
        .withConfig(config).build();

See more stacks you can include

Find out more about about the AMQP support

Contributing to Muon Core

Contributions to Muon are very welcome.

You can contribute by filing bugs on any of the repositories, pull requests for existing issues are also welcome (please note the licensing/ copyright assignment requirements)

Apart from the existing repositories, the most useful areas to extend Muon are :-

  • Add a new stack. Got an idea or requirement for how systems should communicate? In Muon, this is expressed as a stack, with an idiomatic API. Write your own and contribute it to the community!

  • Add a transport. Is your broker not supported? Do you want to go brokerless, use direct TCP? Are you rolling out a service mesh? This is a transport.

  • Add a discovery. Etcd, Eureka, DNS. These are discovery systems, and Muon can be updated to work with any of them, and in fact, all of them at once. Write a Discovery to take advantage of them.

See [documentation](http://muoncore.io)

License

All code is Copyright (c) Muon Core Ltd 2017.

Muon is Free Software, licensed under the terms of the LGPLv3 license as included in LICENSE

Muon has a commercial-friendly license allowing private forks and closed modifications of all projects, alongside enterprise support and extended support for enterprise technologies and patterns.

This will enable you to use Muon in any situation where your legal team will not accept a Free Software license.

Please see http://muoncore.io/pro/ for more detail. You can find the commercial license terms in COMM-LICENSE.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].