THRIFT-2383 contrib: sample for connecting Thrift with Rebus

Patch: Jens Geyer
diff --git a/contrib/Rebus/Program.cs b/contrib/Rebus/Program.cs
new file mode 100644
index 0000000..563c62a
--- /dev/null
+++ b/contrib/Rebus/Program.cs
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+using Rebus.Configuration;
+using Rebus.RabbitMQ;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using RebusSample.Client;
+using RebusSample.Server;
+
+namespace RebusSample
+{
+    class Program
+    {
+        static BuiltinContainerAdapter StartRequestServer(string server)
+        {
+            // client Rebus configuration
+            var adapter = new BuiltinContainerAdapter();
+            Configure.With(adapter)
+                .Transport(t => t.UseRabbitMq("amqp://" + server, "MathRequests", "MathRequestErrors"))
+                .MessageOwnership(o => o.FromRebusConfigurationSection())
+                .CreateBus().Start();
+
+            // register all relevant message handlers 
+            adapter.Register(typeof(MathRequestCallHandler));
+            return adapter;
+        }
+
+
+        static BuiltinContainerAdapter StartResponseServer(string server)
+        {
+            // client Rebus configuration
+            var adapter = new BuiltinContainerAdapter();
+            Configure.With(adapter)
+                .Transport(t => t.UseRabbitMq("amqp://" + server, "MathResponses", "MathResponseErrors"))
+                .MessageOwnership(o => o.FromRebusConfigurationSection())
+                .CreateBus().Start();
+
+            // register all relevant message handlers 
+            adapter.Register(typeof(MathResponseCallHandler));
+            return adapter;
+        }
+
+        static void Main(string[] args)
+        {
+            string server = "localhost";
+
+            // start all servers
+            var req = StartRequestServer(server);
+            var rsp = StartResponseServer(server);
+
+            // send the first message
+            var random = new Random();
+            var client = new MathRequestClient(server);
+            client.DoTheMath(random.Next(), random.Next());
+
+            // now what?
+            Console.Write("Hit <ENTER> to stop ... ");
+            Console.ReadLine();
+        }
+    }
+}