55
55
//
56
56
//---------------------------------------------------------------------------
57
57
using System ;
58
- using System . Diagnostics ;
58
+ using System . Diagnostics ;
59
59
using System . Text ;
60
60
61
- using RabbitMQ . Client ;
61
+ using RabbitMQ . Client ;
62
62
using RabbitMQ . Client . MessagePatterns ;
63
63
64
64
namespace RabbitMQ . Client . Examples {
@@ -76,48 +76,45 @@ public static int Main(string[] args) {
76
76
string serverAddress = args [ 0 ] ;
77
77
int messageCount = int . Parse ( args [ 1 ] ) ;
78
78
79
- using ( IConnection conn = new ConnectionFactory ( ) . CreateConnection ( serverAddress ) )
80
- {
79
+ using ( IConnection conn =
80
+ new ConnectionFactory ( ) . CreateConnection ( serverAddress ) )
81
+ {
81
82
Stopwatch sendTimer = new Stopwatch ( ) ;
82
- Stopwatch sendUnkeyedTimer = new Stopwatch ( ) ;
83
83
Stopwatch receiveTimer = new Stopwatch ( ) ;
84
84
85
- using ( IModel receiveCh = conn . CreateModel ( ) ) {
86
- string q = receiveCh . QueueDeclare ( ) ;
85
+ using ( IModel ch = conn . CreateModel ( ) ) {
86
+ sendTimer . Start ( ) ;
87
87
88
- using ( IModel sendCh = conn . CreateModel ( ) ) {
89
- sendTimer . Start ( ) ;
90
-
91
- for ( int i = 0 ; i < messageCount ; ++ i ) {
92
- sendCh . BasicPublish ( "" , q , null , Message ) ;
93
- }
88
+ for ( int i = 0 ; i < messageCount ; ++ i ) {
89
+ ch . BasicPublish ( "" , "" , null , Message ) ;
94
90
}
95
- sendTimer . Stop ( ) ;
96
-
97
- using ( IModel sendCh = conn . CreateModel ( ) ) {
98
- sendUnkeyedTimer . Start ( ) ;
99
-
100
- for ( int i = 0 ; i < messageCount ; ++ i ) {
101
- sendCh . BasicPublish ( "" , "" , null , Message ) ;
102
- }
103
- }
104
- sendUnkeyedTimer . Stop ( ) ;
91
+ }
92
+ sendTimer . Stop ( ) ;
105
93
106
- QueueingBasicConsumer consumer = new QueueingBasicConsumer ( receiveCh ) ;
107
- receiveCh . BasicConsume ( q , true , null , consumer ) ;
108
- receiveTimer . Start ( ) ;
109
-
110
- for ( int i = 0 ; i < messageCount ; ++ i ) {
111
- consumer . Queue . Dequeue ( ) ;
94
+ using ( IModel ch = conn . CreateModel ( ) ) {
95
+ string q = ch . QueueDeclare ( ) ;
96
+
97
+ for ( int i = 0 ; i < messageCount + 1 ; ++ i ) {
98
+ ch . BasicPublish ( "" , q , null , Message ) ;
99
+ }
100
+ //This ensures that all messages have been enqueued
101
+ ch . BasicGet ( q , true ) ;
102
+
103
+ QueueingBasicConsumer consumer =
104
+ new QueueingBasicConsumer ( ch ) ;
105
+ receiveTimer . Start ( ) ;
106
+ ch . BasicConsume ( q , true , null , consumer ) ;
107
+
108
+ for ( int i = 0 ; i < messageCount ; ++ i ) {
109
+ consumer . Queue . Dequeue ( ) ;
112
110
}
113
- receiveTimer . Stop ( ) ;
114
- }
115
-
116
- Console . WriteLine ( "Performance Test Completed" ) ;
117
- Console . WriteLine ( "Send (unkeyed): {0}Hz" , ToHertz ( sendUnkeyedTimer . ElapsedMilliseconds , messageCount ) ) ;
118
- Console . WriteLine ( "Send: {0}Hz" , ToHertz ( sendTimer . ElapsedMilliseconds , messageCount ) ) ;
119
- Console . WriteLine ( "Receive: {0}Hz" , ToHertz ( receiveTimer . ElapsedMilliseconds , messageCount ) ) ;
120
-
111
+ receiveTimer . Stop ( ) ;
112
+ }
113
+
114
+ Console . WriteLine ( "Performance Test Completed" ) ;
115
+ Console . WriteLine ( "Send: {0}Hz" , ToHertz ( sendTimer . ElapsedMilliseconds , messageCount ) ) ;
116
+ Console . WriteLine ( "Receive: {0}Hz" , ToHertz ( receiveTimer . ElapsedMilliseconds , messageCount ) ) ;
117
+
121
118
return 0 ;
122
119
}
123
120
} catch ( Exception e ) {
@@ -126,9 +123,8 @@ public static int Main(string[] args) {
126
123
}
127
124
}
128
125
129
- private static double ToHertz ( long milliseconds , int messageCount ) {
130
- double secsPerMessage = ( ( double ) milliseconds ) / ( ( double ) messageCount ) / 1000f ;
131
- return 1 / secsPerMessage ;
126
+ private static double ToHertz ( long milliseconds , int messageCount ) {
127
+ return ( ( long ) messageCount ) * 1000L / milliseconds ;
132
128
}
133
129
}
134
130
}
0 commit comments