1
+ using System ;
2
+ using System . Diagnostics ;
3
+ using System . Threading ;
4
+ using ServiceStack . Common ;
5
+ using ServiceStack . Common . Support ;
6
+ using ServiceStack . Logging ;
7
+ using ServiceStack . Logging . Support . Logging ;
8
+ using ServiceStack . Redis ;
9
+ using ServiceStack . Redis . Messaging ;
10
+ using ServiceStack . Text ;
11
+
12
+ namespace TestMqHost
13
+ {
14
+ class Program2
15
+ {
16
+ static void Main ( string [ ] args )
17
+ {
18
+ var clientManager = new PooledRedisClientManager ( new [ ] { "localhost" } )
19
+ {
20
+ PoolTimeout = 1000 ,
21
+ } ;
22
+ clientManager . GetClient ( ) . FlushAll ( ) ;
23
+
24
+ var mqHost = new RedisMqServer ( clientManager ) ;
25
+
26
+ var msgsProcessed = 0 ;
27
+ var msgsQueued = 0 ;
28
+ var sum = 0 ;
29
+ mqHost . RegisterHandler < Incr > ( c =>
30
+ {
31
+ var dto = c . GetBody ( ) ;
32
+ sum += dto . Value ;
33
+ Console . WriteLine ( "Received {0}, sum: {1}" , dto . Value , sum ) ;
34
+ msgsProcessed ++ ;
35
+ return null ;
36
+ } ) ;
37
+
38
+ mqHost . Start ( ) ;
39
+ var processes = Process . GetProcessesByName ( "redis-server" ) ;
40
+ var timer = new Timer ( s =>
41
+ {
42
+ using ( var client = mqHost . MessageFactory . CreateMessageProducer ( ) )
43
+ {
44
+ try
45
+ {
46
+ client . Publish ( new Incr { Value = 1 } ) ;
47
+ msgsQueued ++ ;
48
+ Console . WriteLine ( "Message #{0} published." , msgsQueued ) ;
49
+ }
50
+ catch { }
51
+ }
52
+ } , null , TimeSpan . Zero , TimeSpan . FromSeconds ( 1 ) ) ;
53
+
54
+ Thread . Sleep ( 5000 ) ;
55
+ timer . Change ( Timeout . Infinite , Timeout . Infinite ) ;
56
+ Thread . Sleep ( 1000 ) ;
57
+
58
+ int msgsQueuedBeforeKill = msgsQueued ;
59
+ int msgsProcessedBeforeKill = msgsProcessed ;
60
+ processes [ 0 ] . Kill ( ) ;
61
+
62
+ timer . Change ( TimeSpan . Zero , TimeSpan . FromSeconds ( 1 ) ) ;
63
+ Thread . Sleep ( 15000 ) ;
64
+ timer . Dispose ( ) ;
65
+
66
+ Thread . Sleep ( 1000 ) ;
67
+
68
+ mqHost . GetStats ( ) . PrintDump ( ) ;
69
+ mqHost . GetStatus ( ) . Print ( ) ;
70
+
71
+ "Messages queued before kill: {0}" . Print ( msgsQueuedBeforeKill ) ;
72
+ "Messages processed before kill: {0}" . Print ( msgsProcessedBeforeKill ) ;
73
+
74
+ "Messages queued: {0}" . Print ( msgsQueued ) ;
75
+ "Messages processed: {0}" . Print ( msgsProcessed ) ;
76
+
77
+ Console . ReadKey ( ) ;
78
+ }
79
+ }
80
+ }
0 commit comments