Skip to content

Commit 2cb89f1

Browse files
author
Alexandru Scvortov
committed
added Subscriber example
1 parent 189f098 commit 2cb89f1

File tree

2 files changed

+201
-0
lines changed

2 files changed

+201
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<!-- Warning! This file contains important customizations. Using Visual Studio to edit project's properties might break things. -->
4+
<!-- Props file -->
5+
<Import Project="$(MSBuildProjectDirectory)\..\..\..\..\Local.props" />
6+
<!-- Visual Studio generated -->
7+
<PropertyGroup>
8+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
9+
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
10+
<ProductVersion>9.0.21022</ProductVersion>
11+
<SchemaVersion>2.0</SchemaVersion>
12+
<ProjectGuid>{6BF8B993-1722-446E-89B3-7BAC6066BECC}</ProjectGuid>
13+
<OutputType>Exe</OutputType>
14+
<AppDesignerFolder>properties</AppDesignerFolder>
15+
<RootNamespace>RabbitMQ.Client.Examples</RootNamespace>
16+
<AssemblyName>Subscriber</AssemblyName>
17+
<TargetFrameworkVersion>$(PropTargetFramework)</TargetFrameworkVersion>
18+
<FileAlignment>512</FileAlignment>
19+
</PropertyGroup>
20+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
21+
<DebugSymbols>true</DebugSymbols>
22+
<DebugType>full</DebugType>
23+
<Optimize>false</Optimize>
24+
<OutputPath>build\bin\</OutputPath>
25+
<DefineConstants>DEBUG;TRACE</DefineConstants>
26+
<ErrorReport>prompt</ErrorReport>
27+
<WarningLevel>4</WarningLevel>
28+
</PropertyGroup>
29+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
30+
<DebugType>pdbonly</DebugType>
31+
<Optimize>true</Optimize>
32+
<OutputPath>build\bin\</OutputPath>
33+
<DefineConstants>TRACE</DefineConstants>
34+
<ErrorReport>prompt</ErrorReport>
35+
<WarningLevel>4</WarningLevel>
36+
</PropertyGroup>
37+
<ItemGroup>
38+
<Reference Include="System" />
39+
<Reference Include="System.Data" />
40+
<Reference Include="System.Xml" />
41+
</ItemGroup>
42+
<ItemGroup>
43+
<Compile Include="properties\AssemblyInfo.cs" />
44+
</ItemGroup>
45+
<ItemGroup>
46+
<ProjectReference Include="..\..\..\client\RabbitMQ.Client\RabbitMQ.Client.csproj">
47+
<Project>{71713FDD-D5EC-40B2-A924-76F80AD57E12}</Project>
48+
<Name>RabbitMQ.Client</Name>
49+
</ProjectReference>
50+
</ItemGroup>
51+
<ItemGroup>
52+
<Compile Include="src\examples\Subscriber.cs" />
53+
</ItemGroup>
54+
<!-- Mono compatibility workarounds -->
55+
<PropertyGroup Condition=" '$(PropUsingMono)' == 'true'">
56+
<_DisabledWarnings>$(NoWarn)</_DisabledWarnings>
57+
</PropertyGroup>
58+
<!-- Microsoft CSharp targets -->
59+
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
60+
</Project>
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
// This source code is dual-licensed under the Apache License, version
2+
// 2.0, and the Mozilla Public License, version 1.1.
3+
//
4+
// The APL v2.0:
5+
//
6+
//---------------------------------------------------------------------------
7+
// Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial
8+
// Technologies LLC., and Rabbit Technologies Ltd.
9+
//
10+
// Licensed under the Apache License, Version 2.0 (the "License");
11+
// you may not use this file except in compliance with the License.
12+
// You may obtain a copy of the License at
13+
//
14+
// http://www.apache.org/licenses/LICENSE-2.0
15+
//
16+
// Unless required by applicable law or agreed to in writing, software
17+
// distributed under the License is distributed on an "AS IS" BASIS,
18+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19+
// See the License for the specific language governing permissions and
20+
// limitations under the License.
21+
//---------------------------------------------------------------------------
22+
//
23+
// The MPL v1.1:
24+
//
25+
//---------------------------------------------------------------------------
26+
// The contents of this file are subject to the Mozilla Public License
27+
// Version 1.1 (the "License"); you may not use this file except in
28+
// compliance with the License. You may obtain a copy of the License at
29+
// http://www.rabbitmq.com/mpl.html
30+
//
31+
// Software distributed under the License is distributed on an "AS IS"
32+
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
33+
// License for the specific language governing rights and limitations
34+
// under the License.
35+
//
36+
// The Original Code is The RabbitMQ .NET Client.
37+
//
38+
// The Initial Developers of the Original Code are LShift Ltd,
39+
// Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd.
40+
//
41+
// Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd,
42+
// Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd
43+
// are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial
44+
// Technologies LLC, and Rabbit Technologies Ltd.
45+
//
46+
// Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift
47+
// Ltd. Portions created by Cohesive Financial Technologies LLC are
48+
// Copyright (C) 2007-2010 Cohesive Financial Technologies
49+
// LLC. Portions created by Rabbit Technologies Ltd are Copyright
50+
// (C) 2007-2010 Rabbit Technologies Ltd.
51+
//
52+
// All Rights Reserved.
53+
//
54+
// Contributor(s): ______________________________________.
55+
//
56+
//---------------------------------------------------------------------------
57+
using System;
58+
using System.Text;
59+
60+
using RabbitMQ.Client;
61+
using RabbitMQ.Client.Events;
62+
using RabbitMQ.Client.MessagePatterns;
63+
64+
namespace RabbitMQ.Client.Examples {
65+
public class Subscriber {
66+
public static int Main(string[] args) {
67+
if (args.Length < 1) {
68+
Console.Error.WriteLine("Usage: Subscriber <hostname>[:<port number>] [<message count>]");
69+
Console.Error.WriteLine("RabbitMQ .NET client version "+typeof(IModel).Assembly.GetName().Version.ToString());
70+
return 2;
71+
}
72+
73+
string serverAddress = args[0];
74+
long msgCount = (args.Length > 1) ? Convert.ToInt64(args[1]) : 10;
75+
ConnectionFactory cf = new ConnectionFactory();
76+
cf.Address = serverAddress;
77+
using (IConnection conn = cf.CreateConnection()) {
78+
using (IModel ch = conn.CreateModel()) {
79+
string queueName = ensureQueue(ch);
80+
81+
sendMessages(ch, queueName, 2*msgCount);
82+
using (Subscription sub = new Subscription(ch, queueName)) {
83+
blockingReceiveMessages(sub, msgCount);
84+
enumeratingReceiveMessages(sub, msgCount);
85+
}
86+
}
87+
}
88+
89+
return 0;
90+
}
91+
92+
private static void sendMessages(IModel ch, string queueName, long msgCount) {
93+
Console.WriteLine("Sending {0} messages to queue {1} via the amq.direct exchange.", msgCount, queueName);
94+
95+
while (msgCount --> 0) {
96+
ch.BasicPublish("amq.direct", queueName, null, Encoding.UTF8.GetBytes("Welcome to Caerbannog!"));
97+
}
98+
99+
Console.WriteLine("Done.\n");
100+
}
101+
102+
private static void blockingReceiveMessages(Subscription sub, long msgCount) {
103+
Console.WriteLine("Receiving {0} messages (using a Subscriber)", msgCount);
104+
105+
for (int i = 0; i < msgCount; ++i) {
106+
Console.WriteLine("Message {0}: {1} (via Subscription.Next())",
107+
i, messageText(sub.Next()));
108+
Console.WriteLine("Message {0} again: {1} (via Subscription.LatestEvent)",
109+
i, messageText(sub.LatestEvent));
110+
}
111+
112+
Console.WriteLine("Done.\n");
113+
}
114+
115+
private static void enumeratingReceiveMessages(Subscription sub, long msgCount) {
116+
Console.WriteLine("Receiving {0} messages (using Subscriber's IEnumerator)", msgCount);
117+
118+
int i = 0;
119+
foreach (BasicDeliverEventArgs ev in sub) {
120+
Console.WriteLine("Message {0}: {1}",
121+
i, messageText(ev));
122+
if (++i == msgCount)
123+
break;
124+
}
125+
126+
Console.WriteLine("Done.\n");
127+
}
128+
129+
private static string messageText(BasicDeliverEventArgs ev) {
130+
return Encoding.UTF8.GetString(ev.Body);
131+
}
132+
133+
private static string ensureQueue(IModel ch) {
134+
Console.WriteLine("Creating a queue and binding it to amq.direct");
135+
string queueName = ch.QueueDeclare();
136+
ch.QueueBind(queueName, "amq.direct", queueName, false, null);
137+
Console.WriteLine("Done. Created queue {0}.\n", queueName);
138+
return queueName;
139+
}
140+
}
141+
}

0 commit comments

Comments
 (0)