Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3622664
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T23:17:18+00:00 2026-05-18T23:17:18+00:00

We have cloud-hosted (RackSpace cloud) Ruby and Java apps that will interact as follows:

  • 0

We have cloud-hosted (RackSpace cloud) Ruby and Java apps that will interact as follows:

  1. Ruby app sends a request to Java app. Request consists of map structure containing strings, integers, other maps, and lists (analogous to JSON).
  2. Java app analyzes data and sends reply to Ruby App.

We are interested in evaluating both messaging formats (JSON, Buffer Protocols, Thrift, etc.) as well as message transmission channels/techniques (sockets, message queues, RPC, REST, SOAP, etc.)

Our criteria:

  1. Short round-trip time.
  2. Low round-trip-time standard deviation. (We understand that garbage collection pauses and network usage spikes can affect this value).
  3. High availability.
  4. Scalability (we may want to have multiple instances of Ruby and Java app exchanging point-to-point messages in the future).
  5. Ease of debugging and profiling.
  6. Good documentation and community support.
  7. Bonus points for Clojure support.
  8. Good dynamic language support.

What combination of message format and transmission method would you recommend? Why?

I’ve gathered here some materials we have already collected for review:

  • Comparison of various java serialization options
  • Comparison of Thrift and Protocol Buffers (old)
  • Comparison of various data interchange formats
  • Comparison of Thrift and Protocol Buffers
  • Fallacies of Protocol Buffers RPC features
  • Discussion of RPC in the context of AMQP (Message-Queueing)
  • Comparison of RPC and message-passing in distributed systems (pdf)
  • Criticism of RPC from perspective of message-passing fan
  • Overview of Avro from Ruby programmer perspective
  • Overview of Thrift from Ruby programmer perspective
  • Overview of Thrift from Java programmer perspective
  • Introduction to MessagePack
  • Introduction to BERT by dynamic language enthusiast
  • Message Queue Evaluation Notes
  • ZeroMQ and Clojure
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T23:17:19+00:00Added an answer on May 18, 2026 at 11:17 pm

    We have decided to go with BSON over RabbitMQ.

    We like BSON’s support for heterogeneous collections and the lack of the need to specify the format of messages up-front. We don’t mind that it has poor space usage characteristics and likely poorer serialization performance than other message formats since the messaging portion of our application is not anticipated to be the bottleneck. It doesn’t look like a nice Clojure interface has been written to let you directly manipulate BSON objects, but hopefully that won’t be an issue. I will revise this entry if we decide that BSON won’t work out for us.

    We chose RabbitMQ mainly because we already have experience with it and are using it in a system that demands high throughput and availability.

    If messaging does become a bottleneck, we will look first to BERT (we rejected it because it currently does not appear to have Java support), then to MessagePack (rejected because it appears that there isn’t a large community of Java developers using it), then to Avro (rejected because it requires you to define your message format up-front), then Protocol Buffers (rejected because of the extra code generation step and lack of heterogeneous collections) and then Thrift (rejected for the reasons mentioned for Protocol Buffers).

    We may want to go with a plain RPC scheme rather than using a message queue since our messaging style is essentially synchronous point-to-point.

    Thanks for your input everyone!

    Update: Here is the project.clj and core.clj that shows how to convert Clojure maps to BSON and back:

    ;;;; project.clj
    
    (defproject bson-demo "0.0.1"
      :description "BSON Demo"
      :dependencies [[org.clojure/clojure "1.2.0"]
                     [org.clojure/clojure-contrib "1.2.0"]
                     [org.mongodb/mongo-java-driver "2.1"]]
      :dev-dependencies [[swank-clojure "1.3.0-SNAPSHOT"]]
      :main core)
    
    ;;;; core.clj
    (ns core
      (:gen-class)
      (:import [org.bson BasicBSONObject BSONEncoder BSONDecoder]))
    
    (defonce *encoder* (BSONEncoder.))
    
    (defonce *decoder* (BSONDecoder.))
    
    ;; XXX Does not accept keyword arguments. Convert clojure.lang.Keyword in map to java.lang.String first.
    (defn map-to-bson [m]
      (->> m (BasicBSONObject.) (.encode *encoder*)))
    
    (defn bson-to-map [^BasicBSONObject b]
      (->> (.readObject *decoder* b) (.toMap) (into {})))
    
    (defn -main []
      (let [m {"foo" "bar"}]
        (prn (bson-to-map (map-to-bson m)))))
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a web app hosted in a cloud environment which can be expanded
I have an iPhone app that must use external cloud db to sync data
I have a custom initializer that configures a 'cloud' storage provider (Google, AWS, Rackspace).
Context: The Cloud We have a java-based web application that we normally host on
I have a few sites that have SSL Certificates installed. When an SSL request
I currently have a .net web application on a cluster based system (Rackspace cloud).
I have hosted a secure WCF service on cloud with a certificate created by
I have an asp.net mvc app that is built to run as standard web
I have got rackspace cloud server and i have installed lamstack and more. Its
I have a new web app that is packaged as a WAR as part

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.