A JVM library to use RabbitMQ as an embedded service

Overview

Embedded RabbitMQ

Compatibility: Unix Linux OS X Windows
Builds: Linux CircleCI branch OS X Build Status Windows Build status
Reports: Coverage Status Javadocs
Dist: License Snapshots Maven Central
Social: Gitter chat PayPal donation Flattr donation GratiPay donation

This library allows for the use of various RabbitMQ versions as if it was an embedded service that can be controlled from within the JVM.

The way it works is by downloading, from official repositories, the correct artifact for the given version and operating system, extracting it and starting the RabbitMQ Server with the specified configuration. The broker can then be administered from within the JVM by using equivalent commands to rabbitmqctl or rabbitmq-plugins.

Pre-requisites:

  • This project requires Java 7+
  • RabbitMQ Broker requires Erlang to be installed.

Quick Start:

1. Add a dependency to this project

For Maven:

  <dependency>
      <groupId>io.arivera.oss</groupId>
      <artifactId>embedded-rabbitmq</artifactId>
      <version>X.Y.Z</version>
  </dependency>

For Ivy: <dependency org="io.arivera.oss" name="embedded-rabbitmq" rev="X.Y.Z" />

For Gradle: compile 'io.arivera.oss:embedded-rabbitmq:X.Y.Z'

For SBT: libraryDependencies += "io.arivera.oss" % "embedded-rabbitmq" % "X.Y.Z"

X.Y.Z is the latest released version of this project. For more info visit Maven Central repo or visit the releases page.

For SNAPSHOT releases, add the SonaType repository to your build system: https://oss.sonatype.org/content/repositories/snapshots/

2. Start the RabbitMQ broker

EmbeddedRabbitMqConfig config = new EmbeddedRabbitMqConfig.Builder().build();
EmbeddedRabbitMq rabbitMq = new EmbeddedRabbitMq(config);
rabbitMq.start();

When start() is invoked, the Embedded-RabbitMQ library will download the latest release from RabbitMQ.com that best matches your Operating System. The artifact will be decompressed into a temporary folder, and a new OS process will launch the RabbitMQ broker.

Read more about how to customize your RabbitMQ broker.

3. Verify RabbitMQ is working as you'd expect

ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("localhost");
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");

Connection connection = connectionFactory.newConnection();
assertThat(connection.isOpen(), equalTo(true));
Channel channel = connection.createChannel();
assertThat(channel.isOpen(), equalTo(true));

channel.close();
connection.close();

4. Stop the RabbitMQ broker:

rabbitMq.stop();

Customization

Customization is done through the EmbeddedRabbitMqConfig and it's Builder class. All snippets below will refer to this:

EmbeddedRabbitMqConfig.Builder configBuilder = new EmbeddedRabbitMqConfig.Builder();
...
EmbeddedRabbitMqConfig config = configBuilder.build();
EmbeddedRabbitMq rabbitMq = new EmbeddedRabbitMq(config);
rabbitMq.start();

Define a RabbitMQ version to use:

configBuilder.version(PredefinedVersion.LATEST)

or

configBuilder.version(PredefinedVersion.V3_6_5)

By using the version() method, the download URL, executable paths, etc. will be pre-set for Unix/Mac/Windows Operating Systems. You can change the download source from the official rabbitmq.com servers and Github by using the downloadFrom() method:

configBuilder.downloadFrom(OfficialArtifactRepository.GITHUB)

Similarly, if you wish to download another version and/or use another server by specifying a URL:

String url = "https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_6_milestone1/rabbitmq-server-mac-standalone-3.6.5.901.tar.xz";
configBuilder.downloadFrom(new URL(url), "rabbitmq_server-3.6.5.901")

or if you are okay with the existing artifact repositories but you just need a released version not listed in the PredefinedVersion enum:

configBuilder.version(new BaseVersion("3.8.1"))

Downloaded files:

By default, EmbeddedRabbitMq will attempt to save downloaded files to ~/.embeddedrabbitmq. You can change this by making use of the downloadTarget() setter, which accepts both a directory or a file:

configBuilder.downloadTarget(new File("/tmp/rabbitmq.tar.xz"))
...
// configBuilder.downloadTarget(new File("/tmp"))

Warning: If a file with the same name already exists, it will be overwritten.

The default behavior of this library is to re-use previously downloaded files. If you don't wish to use that behavior, disable it:

configBuilder.useCachedDownload(false)

To ensure a corrupted or partially downloaded file isn't re-used, the default behavior is to delete it when the issue is detected. This means that a fresh copy is downloaded next time. To disable this behavior do:

configBuilder.deleteDownloadedFileOnErrors(false)

Extraction path:

EmbeddedRabbitMq will decompress the downloaded file to a temporary folder. You can specify your own folder like so:

configBuilder.extractionFolder(new File("/rabbits/"))

Warning: The content of this folder will be overwritten every time by the newly extracted files/folders.

Advanced RabbitMQ management

If you wish to control your RabbitMQ broker further, you can execute any of the commands available to you in the /bin directory, like so:

RabbitMqCommand command = new RabbitMqCommand(config, "command", "arg1", "arg2", ...);
StartedProcess process = command.call();
ProcessResult result = process.getFuture().get();
boolean success = result.getExitValue() == 0;
if (success) {
  doSomething(result.getOutput());
}

where:

  • command is something like "rabbitmq-ctl" (no need for .bat extension in Windows since it will be automatically appended).
  • args is a variable-length array list, where each element is a word (eg. "-n", "nodeName", "list_users")

See the JavaDocs for more information on RabbitMqCommand and other helper classes like RabbitMqDiagnostics, RabbitMqCtl, RabbitMqPlugins and RabbitMqServer which aim at making it easier to execute common commands.

Enabling RabbitMQ Plugins:

To enable a plugin like rabbitmq_management, you can use the RabbitMqPlugins class like so:

    RabbitMqPlugins rabbitMqPlugins = new RabbitMqPlugins(config);
    rabbitMqPlugins.enable("rabbitmq_management");

This call will block until the command is completed.

You can verify by executing the list() method:

    Map<String, Plugin> plugins = rabbitMqPlugins.list();
    Plugin plugin = plugins.get("rabbitmq_management");
    assertThat(plugin, is(notNullValue()));
    assertThat(plugin.getState(), hasItem(Plugin.State.ENABLED_EXPLICITLY));
    assertThat(plugin.getState(), hasItem(Plugin.State.RUNNING));

You can also see which other plugins where enabled implicitly, by calling the groupedList():

    Map<Plugin.State, Set<Plugin>> groupedPlugins = rabbitMqPlugins.groupedList();
    Set<Plugin> plugins = groupedPlugins.get(Plugin.State.ENABLED_IMPLICITLY);
    assertThat(plugins.size(), is(not(equalTo(0))));

FAQ:

Troubleshooting:

Q: RabbitMQ fails to start due to ERROR: node with name "rabbit" already running on "localhost". Why is this and what can I do?

A: This happens when RabbitMQ fails to be stopped correctly in a previous run. To resolve this issue, manually identify the process and terminate it. To avoid this from happening again, ensure the stop() method is invoked in your code.

Q: RabbitMQ fails to start with a message erl command not found. What's this about?

A: RabbitMQ requires an installation of Erlang to be present in the system. Please install it first.

Q: RabbitMQ fails to start with a message {"init terminating in do_boot",{undef,[{rabbit_prelaunch,start,[]},{init,start_it,1},{init,start_em,1}]}}

A: Most likely you don't have an updated version of Erlang installed.

To check the version of Erlang in your system execute:

$ erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().'  -noshell

RabbitMQ requires:

  • RabbitMQ v3.5.X requires Erlang R13B03 at a minimum.
  • RabbitMQ v3.6.X requires Erlang R16B03 at a minimum (or 17 if you're using SSL/TLS).

For example, if your version is R14B04, you can run RabbitMQ v3.5.X but not 3.6.X.

Read more here: http://www.rabbitmq.com/which-erlang.html

Acknowledgements

This project was inspired from other excellent Open Source libraries, particularly Embedded-MongoDB and Embedded-Redis.

Big thanks to the following OSS projects that made this project possible:

And of course, the biggest thanks to Pivotal and the RabbitMQ team for their hard work.

License

This project is released under Apache License Version 2.0, which basically means:

You can do what you like with the software, as long as you include the required notices. This permissive license contains a patent license from the contributors of the code.

Summary courtesy of: https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)

Say thanks

If you want to say thanks, you can:

  • Star this project
  • Donate:
  • Contribute improvements
Comments
  • Add support for RabbitMQ versions up to 3.7.7

    Add support for RabbitMQ versions up to 3.7.7

    • Add newest versions of RabbitMQ.
    • Switched default download source to GitHub as it spans more versions.
    • Add support for more digits to the version comparator.
    • Add bintray download source.
    • Fixes #44
    enhancement 
    opened by pete-woods 19
  • Can't start RabbitMQ in my application.

    Can't start RabbitMQ in my application.

    I have a App class.

    public class App {
        public static void main(String[] args) {
            EmbeddedRabbitMqConfig config = new EmbeddedRabbitMqConfig.Builder().build();
            EmbeddedRabbitMq rabbitMq = new EmbeddedRabbitMq(config);
            rabbitMq.start();
        }
    }
    

    However when I was trying to start it, the following error poped up.

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Exception in thread "main" io.arivera.oss.embedded.rabbitmq.extract.ExtractionException: Download file 'C:\Users\wangzen\.embeddedrabbitmq\rabbitmq-server-windows-3.6.9.zip' was not found or is not accessible.
    	at io.arivera.oss.embedded.rabbitmq.extract.BasicExtractor$ZipExtractor.run(BasicExtractor.java:223)
    	at io.arivera.oss.embedded.rabbitmq.extract.BasicExtractor.run(BasicExtractor.java:39)
    	at io.arivera.oss.embedded.rabbitmq.extract.CachedExtractor.run(CachedExtractor.java:22)
    	at io.arivera.oss.embedded.rabbitmq.EmbeddedRabbitMq.extract(EmbeddedRabbitMq.java:75)
    	at io.arivera.oss.embedded.rabbitmq.EmbeddedRabbitMq.start(EmbeddedRabbitMq.java:60)
    	at App.main(App.java:22)
    Caused by: java.util.zip.ZipException: archive is not a ZIP archive
    	at org.apache.commons.compress.archivers.zip.ZipFile.positionAtEndOfCentralDirectoryRecord(ZipFile.java:806)
    	at org.apache.commons.compress.archivers.zip.ZipFile.positionAtCentralDirectory(ZipFile.java:736)
    	at org.apache.commons.compress.archivers.zip.ZipFile.populateFromCentralDirectory(ZipFile.java:481)
    	at org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:216)
    	at org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:192)
    	at org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:153)
    	at io.arivera.oss.embedded.rabbitmq.extract.BasicExtractor$ZipExtractor.run(BasicExtractor.java:221)
    	... 5 more
    

    I started the application with Administrator's privilege.

    opened by kenshinji 10
  • Exchange type topic throws exception

    Exchange type topic throws exception

    When I use exchange type 'topic' while declaring exchange exception is thrown see below, but with type 'direct' everything works fine.

    Exception:

    [info]   java.io.IOException:
    [info]   at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
    [info]   at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
    [info]   at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
    [info]   at com.rabbitmq.client.impl.ChannelN.exchangeDeclare(ChannelN.java:703)
    [info]   at com.rabbitmq.client.impl.ChannelN.exchangeDeclare(ChannelN.java:672)
    [info]   at com.rabbitmq.client.impl.ChannelN.exchangeDeclare(ChannelN.java:720)
    [info]   at com.rabbitmq.client.impl.ChannelN.exchangeDeclare(ChannelN.java:61)
    [info]   ...
    [info]   Cause: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'test-exchange' in vhost '/': received 'topic' but current is 'direct', class-id=40, method-id=10)Reporter completed abruptly with an exception after receiving event: TestFailed(Ordinal(0, 17),java.io.IOException was thrown.
    

    An example recipe

    val TestRMQNodeName = "rabbit-test"
    val TestRMQNodePort = "5672"
    val DecodedExchangeName = "test-exchange"
    
    val config: EmbeddedRabbitMqConfig = new EmbeddedRabbitMqConfig.Builder()
      .rabbitMqServerInitializationTimeoutInMillis(6000)
      .defaultRabbitMqCtlTimeoutInMillis(6000)
      .envVar(RabbitMqEnvVar.NODENAME, TestRMQNodeName)
      .envVar(RabbitMqEnvVar.NODE_PORT, TestRMQNodePort)
      .build()
    
    val rabbitMq: EmbeddedRabbitMq = new EmbeddedRabbitMq(config)
    
    rabbitMq.start()
    
    val connFactory = new ConnectionFactory()
    connFactory.setHost("localhost")
    connFactory.setPort(5672)
    connFactory.setVirtualHost("/")
    connFactory.setUsername("guest")
    connFactory.setPassword("guest")
    val conn = connFactory.newConnection()
    val channel = conn.createChannel()
    channel.exchangeDeclare(DecodedExchangeName, "topic", true);
    
    invalid 
    opened by noorul 9
  • Simplify creation of new Version constants

    Simplify creation of new Version constants

    This is an enhancement request, not a bug, but creating new Version constants when there is no PredefinedVersion (e.g. for V3_7_21) is rather awkward. Callers need to create their own Version implementation that mimics the PredefinedVersion constructor and also make their own ArtifactRepository class, because the official one only handles the special case of Mac downloads for PredefinedVersions. (That could be resolved by having OfficialArtifactRespository.getArtifactPlatform() compare the version component lists when in doubt, but being enums I can't subclass GITHUB et al. to adjust that myself.) It's all possible, but it takes a bit more code than it seems like it deserves.

    enhancement 
    opened by sig-daveka 6
  • Embedded RabbitMq conficts with already running server

    Embedded RabbitMq conficts with already running server

    If a machine already has a running instance of RabbitMq then an attempt to launch embedded RabbitMq would cause an error.

    At least a random port should be selected by default to solve this issue somehow.

    help wanted 
    opened by ov7a 6
  • rabbitmqctl fails with

    rabbitmqctl fails with "escript: Premature end of file reached"

    On my macOS Mojave system using embedded-rabbitmq 1.3.1 to install V3_7_18 attempts to invoke rabbitmqctl fail with "escript: Premature end of file reached". It looks like the extractor isn't handling hard links?

    dkaelbling-laptop 109% ls -l rabbitmq_server-3.7.18/escript/
    total 2056
    -rwxr--r-- 1 daveka staff 1842797 Nov 24 11:22 rabbitmq-diagnostics*
    -rwxr--r-- 1 daveka staff       0 Nov 24 11:22 rabbitmq-plugins*
    -rwxr--r-- 1 daveka staff       0 Nov 24 11:22 rabbitmqctl*
    
    dkaelbling-laptop 114% tar vtjf $TMPDIR/.embedrabbitmq_download/rabbitmq-server-generic-unix-3.7.18.tar.xz | fgrep escript
    drwxr-xr-x  0 root   root        0 Sep 17 00:18 rabbitmq_server-3.7.18/escript/
    -rwxr-xr-x  0 root   root  1842797 Sep 17 00:18 rabbitmq_server-3.7.18/escript/rabbitmq-diagnostics
    hrwxr-xr-x  0 root   root        0 Sep 17 00:18 rabbitmq_server-3.7.18/escript/rabbitmq-plugins link to rabbitmq_server-3.7.18/escript/rabbitmq-diagnostics
    hrwxr-xr-x  0 root   root        0 Sep 17 00:18 rabbitmq_server-3.7.18/escript/rabbitmqctl link to rabbitmq_server-3.7.18/escript/rabbitmq-diagnostics
    
    opened by sig-daveka 5
  • StartupException - can't start the embedded RabbitMQ

    StartupException - can't start the embedded RabbitMQ

    The error received at run() phase new StartupHelper(config).call();

    io.arivera.oss.embedded.rabbitmq.helpers.StartupException: Could not confirm RabbitMQ Server initialization completed successfully within 3000ms

    new EmbeddedRabbitMqConfig.Builder()
      .envVar(RabbitMqEnvVar.NODE_PORT, randomAvailablePort())
      .build()
    rabbitMq = new EmbeddedRabbitMq(config)
    
    try {
    rabbitMq.start()
    } catch {
      case e: Exception =>
    }
    
    invalid 
    opened by ctiliescu 5
  • Standard proxy property settings no longer respected

    Standard proxy property settings no longer respected

    I recently have upgraded to the latest release version (from 1.1.2) and I noticed I am no longer able to download artifacts behind my proxy. Upon some investigation, I noticed release 1.2.1 had made changes to "support" proxy -- which actually broke the standard way of setting proxy settings for Java applications.

    Typically, you set your proxy settings in reserved system properties (i.e. http.proxyHost, http.proxyPort, http.nonProxyHosts, https.proxyHost, ....) and http-protocol handling classes look at these system properties to read (any applicable) proxy settings.

    Prior to the library upgrade, I could download the rabbitmq artifacts through a proxy by setting the standard proxy system properties. With the latest version, I will now be forced to parse the system properties (if applicable) and configure the downloadProxy setting. As part of the parsing, I would also have to ensure the artifact repository domain is not part of the nonProxyHosts list.

    Potential Resolution(s):

    1. revert the proxy commit change -- result: you can download thru the proxy using the standard proxy settings; this is a backward capability breaking change
    2. if you do not set downloadProxy (i.e. null), then it will resort to the default system implementation of handling http/https connections
    bug 
    opened by bitx1 5
  • Problem enabling plugin first time running embedded RabbitMQ

    Problem enabling plugin first time running embedded RabbitMQ

    When I clone my project from git and run it for the first time on machine that didn't download and extract RabbitMQ, and in test I have setting plugins like this:

    @BeforeClass
    public static void startEmbeddedRabbit() {
        EmbeddedRabbitMqConfig config = new EmbeddedRabbitMqConfig.Builder()
            .rabbitMqServerInitializationTimeoutInMillis(RABBIT_STARTING_TIMEOUT)
            .build();
    
        RabbitMqPlugins rabbitMqPlugins = new RabbitMqPlugins(config);
        rabbitMqPlugins.enable("rabbitmq_management");
        rabbitMqPlugins.enable("rabbitmq_tracing");
    
        rabbitMq = new EmbeddedRabbitMq(config);
        rabbitMq.start();
    }
    

    I got exception like this:

    java.lang.IllegalArgumentException: The given command could not be found using the path: /var/folders/7v/56nk9qy52gb3hw658_q1kz840000gn/T/rabbitmq_server-3.6.9/sbin/rabbitmq-plugins
    	at io.arivera.oss.embedded.rabbitmq.bin.RabbitMqCommand.<init>(RabbitMqCommand.java:110)
    	at io.arivera.oss.embedded.rabbitmq.bin.RabbitMqPlugins.execute(RabbitMqPlugins.java:48)
    	at io.arivera.oss.embedded.rabbitmq.bin.RabbitMqPlugins.getProcessResult(RabbitMqPlugins.java:148)
    	at io.arivera.oss.embedded.rabbitmq.bin.RabbitMqPlugins.enable(RabbitMqPlugins.java:124)
    	at eu.h2020.symbiote.messaging.ITests.startEmbeddedRabbit(ITests.java:100)
    ...
    

    The reason is that when I call method enable in RabbitMqPlugins there is no current extracted version of RabbitMQ.

    The workaround is to comment 3 lines about setting plugin and run tests (which will download and extract RabbitMQ). After that I uncomment lines about setting plugins and then it works fine.

    opened by MarioKusek 5
  • Embedded Rabbit MQ is not downloading and starting after deleting .embeddedRabbitMQ Directory

    Embedded Rabbit MQ is not downloading and starting after deleting .embeddedRabbitMQ Directory

    Hi,

    I am using Embedded RabbitMQ for running Integration Tests. Earlier today, everything worked pretty well but after deleting .embeddedRabbitMQ directory and clearing the extracted files in Temp directory, I am not able to run anything smoothly.

    I am getting below exception, even newly it is not getting downloaded.

    Code

      var configBuilder = new EmbeddedRabbitMqConfig.Builder();
            configBuilder.downloadFrom(OfficialArtifactRepository.GITHUB);
            configBuilder.port(5673);
            configBuilder.useCachedDownload(false);
            var config = configBuilder.build();
            var command = new RabbitMqCommand(config, "rabbitmq-server", "start");
            command.call();
    

    Need your help.

    Exception Caused By

    java.lang.IllegalArgumentException: The given command could not be found using the path: C:\Users\<username>\AppData\Local\Temp\rabbitmq_server-3.8.0\sbin\rabbitmq-server.bat
    
    question need more info 
    opened by vigneshbrb 4
  • Simplify creation of new Version

    Simplify creation of new Version

    New BaseVersion class allows consumers of this library to create versions (similar to how PredefinedVersion works) on the fly without having to re-implement a lot of code. Example:

        EmbeddedRabbitMqConfig config = new EmbeddedRabbitMqConfig.Builder()
            .version(new BaseVersion("3.8.1"))
            .build();
    

    PS. I also renamed a couple (non-public) classes to better reflect their purpose instead of overloading the "Custom" prefix (CustomVersion and CustomArtifactRepository).

    new feature 
    opened by AlejandroRivera 3
  • Bump commons-compress from 1.19 to 1.21

    Bump commons-compress from 1.19 to 1.21

    Bumps commons-compress from 1.19 to 1.21.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump logback-classic from 1.1.3 to 1.2.0

    Bump logback-classic from 1.1.3 to 1.2.0

    Bumps logback-classic from 1.1.3 to 1.2.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump junit from 4.12 to 4.13.1

    Bump junit from 4.12 to 4.13.1

    Bumps junit from 4.12 to 4.13.1.

    Release notes

    Sourced from junit's releases.

    JUnit 4.13.1

    Please refer to the release notes for details.

    JUnit 4.13

    Please refer to the release notes for details.

    JUnit 4.13 RC 2

    Please refer to the release notes for details.

    JUnit 4.13 RC 1

    Please refer to the release notes for details.

    JUnit 4.13 Beta 3

    Please refer to the release notes for details.

    JUnit 4.13 Beta 2

    Please refer to the release notes for details.

    JUnit 4.13 Beta 1

    Please refer to the release notes for details.

    Commits
    • 1b683f4 [maven-release-plugin] prepare release r4.13.1
    • ce6ce3a Draft 4.13.1 release notes
    • c29dd82 Change version to 4.13.1-SNAPSHOT
    • 1d17486 Add a link to assertThrows in exception testing
    • 543905d Use separate line for annotation in Javadoc
    • 510e906 Add sub headlines to class Javadoc
    • 610155b Merge pull request from GHSA-269g-pwp5-87pp
    • b6cfd1e Explicitly wrap float parameter for consistency (#1671)
    • a5d205c Fix GitHub link in FAQ (#1672)
    • 3a5c6b4 Deprecated since jdk9 replacing constructor instance of Double and Float (#1660)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump checkstyle from 6.19 to 8.29

    Bump checkstyle from 6.19 to 8.29

    Bumps checkstyle from 6.19 to 8.29.

    Release notes

    Sourced from checkstyle's releases.

    checkstyle-8.29

    https://checkstyle.org/releasenotes.html#Release_8.29

    checkstyle-8.28

    https://checkstyle.org/releasenotes.html#Release_8.28

    checkstyle-8.27

    https://checkstyle.org/releasenotes.html#Release_8.27

    checkstyle-8.26

    https://checkstyle.org/releasenotes.html#Release_8.26

    checkstyle-8.25

    https://checkstyle.org/releasenotes.html#Release_8.25

    checkstyle-8.24

    https://checkstyle.org/releasenotes.html#Release_8.24

    checkstyle-8.23

    https://checkstyle.org/releasenotes.html#Release_8.23

    checkstyle-8.22

    https://checkstyle.org/releasenotes.html#Release_8.22

    checkstyle-8.21

    https://checkstyle.org/releasenotes.html#Release_8.21

    checkstyle-8.20

    https://checkstyle.org/releasenotes.html#Release_8.20

    checkstyle-8.19

    https://checkstyle.org/releasenotes.html#Release_8.19

    checkstyle-8.18

    https://checkstyle.org/releasenotes.html#Release_8.18

    checkstyle-8.17

    https://checkstyle.org/releasenotes.html#Release_8.17

    checkstyle-8.16

    https://checkstyle.org/releasenotes.html#Release_8.16

    checkstyle-8.15

    https://checkstyle.org/releasenotes.html#Release_8.15

    checkstyle-8.14

    http://checkstyle.sourceforge.net/releasenotes.html#Release_8.14

    checkstyle-8.13

    http://checkstyle.sourceforge.net/releasenotes.html#Release_8.13

    ... (truncated)
    Commits
    • 8933d03 [maven-release-plugin] prepare release checkstyle-8.29
    • bd45909 Issue #7487: refactor code to use DetailAST.hasChildren()
    • 317e51f Issue #7487: add method hasChildren() to DetailAST
    • 89b4dcd Issue #3238: Java 8 Grammar: annotations on arrays and varargs
    • 252cd89 dependency: bump junit-pioneer from 0.5.1 to 0.5.2
    • 2ee2615 dependency: bump junit.version from 5.5.2 to 5.6.0
    • 4ed7cb8 minor: add space before xml comment end '-->' to ease reading and make links ...
    • c46a16d Issue #7468: disable 'external-parameter-entities' feature by default
    • dfed794 minor: add missing test case to SuperCloneCheckTest
    • 24e7bdf dependency: bump antlr4.version from 4.7.2 to 4.8-1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v1.5.0)
  • v1.5.0(Mar 4, 2021)

    Improvements:

    • Added support for newer RabbitMQ versions, from 3.8.1 up to 3.8.14

    Fixes:

    • Fixed issue where Erlang versions weren't correctly parsed if they were written in "r" style with lowercase (which was how predefined versions where created). See issue #66
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Dec 5, 2019)

    New Features:

    • It's now easier to use versions not listed in PredefinedVersion enum. Just pass new BaseVersion("3.8.1") to the EmbeddedRabbitMqConfig.Builder().version() and it should work! See PR #62 for more info.

    Contributors:

    • dkaelbling, who reported and contributed the idea+code for this new functionality.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.3(Nov 27, 2019)

    Enhancements:

    • New RabbitMqDiagnostics class to help invoke rabbitmq-diagnostics commands to inspect status of the node/cluster. See manual or See PR #59 for more info. (Note: no parsing of the information resulting from invoking commands has been implemented).

    Fixes:

    • In version 1.3.2 (PR #58), when invoking RabbitMqPlugins or RabbitMqCtl, all environment variables defined by RabbitMqConfig were ignored. This is no longer the case. Only RABBITMQ_NODE_PORT will be ignored by default, but you can define other variables to be ignored or even add new environment variables. See PR #59 for more info.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.2(Nov 25, 2019)

  • v1.3.1(Nov 4, 2019)

    Improvements:

    • Added RabbitMQ versions 3.7.18 and 3.8.0 to the list of predefined versions

    Fixes:

    • When running on MacOS and using predefined version 3.7.18 or higher, the binary couldn't be downloaded from official repos (See Issue #53)
    • CVE-2019-12402 issue due to commons-compress dependency.

    Contributors:

    • Johno Crawford (@johnou)

    Known Issues:

    • Using RabbitMQ v3.7.18 on Mac, when executing rabbitmqctl or rabbitmq-plugins commands, execution will fail. See Issue #57 for more info.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Sep 15, 2018)

    Notes:

    • This version changes the default repository for downloading RabbitMQ artifacts from the RabbitMQ website to Github since starting with v3.7.0, the RabbitMQ website won't be used to distribute artifacts. See "Package Distribution Changes" announcement.

    Commits:

    • cea521c1fabbe3eff36ffd963332ef27734f2aee: Add support for RabbitMQ versions up to 3.7.7 (PR #45)

    Contributors:

    • @pete-woods
    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Dec 7, 2017)

    Restoring ability to define Proxy settings via System Settings without having to manually specify a Proxy in the configuration builder.

    Commits:

    • 55aa2da2b1d7a70671944308af922d73fbf170c5 Fix for Issue #39 (PR #40)

    Fixes:

    • Issue #39 - Proxy System settings not respected (Reported by @bitx1)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Nov 25, 2017)

    Fixed CVE-2015-4035

    It was discovered that the xzgrep's xz helper script did not properly sanitize certain file names. A local attacker could use this flaw to inject and execute arbitrary commands by tricking a user into running the xzgrep script on a file with a specially crafted file name.

    Commits:

    • 14b9c5d740323aeafcb1fe303ab8875c83394f7d Update xz dependency (PR #38)

    Contributors:

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Aug 8, 2017)

    Commits:

    • fd2c317166f7da5953ac75543feec8704d630f82: Added support for using a Proxy to download RabbitMQ artifacts

    Contributors:

    • @deathcoder

    Known Issues:

    • This release breaks functionality for users who rely on setting Proxy settings via System properties. See Issue #39. Fix in PR #40
    Source code(tar.gz)
    Source code(zip)
  • v1.1.2(May 3, 2017)

    Commits:

    • cfa93477fd0c5e658155414d314ccaf8b716fc9e: Added the latest version (3.6.7, 3.6.8 and 3.6.9) to the Predefined Versions

    Contributors:

    • @seanjburns
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Feb 23, 2017)

  • v1.1.0(Nov 25, 2016)

  • v1.0.0(Sep 12, 2016)

Owner
Alejandro Rivera
Alejandro Rivera
This repository contains a functional example of an order delivery service similar to UberEats, DoorDash, and Instacart.

Order Delivery Microservice Example In an event-driven microservices architecture, the concept of a domain event is central to the behavior of each se

Kenny Bastani 198 Dec 7, 2022
Firehose is an extensible, no-code, and cloud-native service to load real-time streaming data from Kafka to data stores, data lakes, and analytical storage systems.

Firehose - Firehose is an extensible, no-code, and cloud-native service to load real-time streaming data from Kafka to data stores, data lakes, and analytical storage systems.

Open DataOps Foundation 279 Dec 22, 2022
An easy-to-use wrapper for many storage systems.

Data Store An easy-to-use wrapper for redis' cached storage system. (support for more data types coming soon) Note: This project is unfinished, and th

Subham 4 Jul 17, 2022
Dagger is an easy-to-use, configuration over code, cloud-native framework built on top of Apache Flink for stateful processing of real-time streaming data.

Dagger Dagger or Data Aggregator is an easy-to-use, configuration over code, cloud-native framework built on top of Apache Flink for stateful processi

Open DataOps Foundation 238 Dec 22, 2022
SMS app based on QKSMS. DISCLAIMER: This project is intended for my own use. No issues are accepted

Messages Messages is an open source replacement to the stock messaging app on Android. DISCLAIMER: Unlike most other projects, this project is for my

Muntashir Al-Islam 13 Dec 16, 2022
A modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs

Smack About Smack is an open source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android. A pure

Ignite Realtime 2.3k Dec 28, 2022
High Performance Inter-Thread Messaging Library

LMAX Disruptor A High Performance Inter-Thread Messaging Library Maintainer LMAX Development Team Support Open a ticket in GitHub issue tracker Google

LMAX Group 15.5k Jan 9, 2023
Real Time communication library using Animated Gifs as a transport™

gifsockets "This library is the websockets of the '90s" - Somebody at Hacker News. This library shows how to achieve realtime text communication using

Alvaro Videla 1.8k Dec 17, 2022
KC4Streams - a simple Java library that provides utility classes and standard implementations for most of the Kafka Streams pluggable interfaces

KC4Streams (which stands for Kafka Commons for Streams) is a simple Java library that provides utility classes and standard implementations for most of the Kafka Streams pluggable interfaces.

StreamThoughts 2 Mar 2, 2022
Govern Service is a lightweight, low-cost service registration, service discovery, and configuration service SDK.

Govern Service is a lightweight, low-cost service registration, service discovery, and configuration service SDK. By using Redis in the existing infrastructure (I believe you have already deployed Redis), it doesn’t need to bring extra to the operation and maintenance deployment. Cost and burden. With the high performance of Redis, Govern Service provides ultra-high TPS&QPS (10W+/s JMH Benchmark).

Ahoo Wang 61 Nov 22, 2022
CoSky is a lightweight, low-cost service registration, service discovery, and configuration service SDK.

High-performance, low-cost microservice governance platform. Service Discovery and Configuration Service

Ahoo Wang 61 Nov 22, 2022
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

pact-jvm JVM implementation of the consumer driven contract library pact. From the Ruby Pact website: Define a pact between service consumers and prov

Pact Foundation 962 Dec 31, 2022
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.

MapDB: database engine MapDB combines embedded database engine and Java collections. It is free under Apache 2 license. MapDB is flexible and can be u

Jan Kotek 4.6k Dec 30, 2022
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.

MapDB: database engine MapDB combines embedded database engine and Java collections. It is free under Apache 2 license. MapDB is flexible and can be u

Jan Kotek 4.6k Jan 1, 2023
A lightweight messaging library that simplifies the development and usage of RabbitMQ with the AMQP protocol.

kryo-messaging This library contains a simple MessagingService which simplifies the setup and work with RabbitMQ and the AMQP protocol. Usage Gradle r

Kryonite Labs 3 Jan 10, 2022
RabbitMQ Java client

RabbitMQ Java Client This repository contains source code of the RabbitMQ Java client. The client is maintained by the RabbitMQ team at Pivotal. Depen

RabbitMQ 1.1k Jan 7, 2023
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 11.7k Jan 8, 2023
:herb: 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等:pushpin:

欢迎大家留言和PR~ Tip: 技术更新换代太快,本仓库仅做参考,自己的项目具体使用哪个版本还需谨慎思考~(不推荐使用最新的版本,推荐使用(最新-1|2)的版本,会比较稳定) spring-boot-quick 前言   自己很早就想搞一个总的仓库就是将自己平时遇到的和学习到的东西整合在一起,方便后

wangxc 2.1k Jan 2, 2023
:racehorse:基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

系统介绍 本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime Text3 + Git + Chrome 压测

FINN 2.3k Dec 27, 2022