Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
CAP
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
CAP
Commits
966f605b
Commit
966f605b
authored
May 22, 2017
by
yangxiaodong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor
parent
a060be4f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
33 deletions
+68
-33
ConsumerHandler.cs
src/Cap.Consistency/Consumer/ConsumerHandler.cs
+55
-32
IConsumerClient.cs
src/Cap.Consistency/Consumer/IConsumerClient.cs
+11
-0
IConsumerHandler.cs
src/Cap.Consistency/Consumer/IConsumerHandler.cs
+2
-1
No files found.
src/Cap.Consistency/Consumer/ConsumerHandler.cs
View file @
966f605b
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
System.Linq
;
using
System.Threading.Tasks
;
using
Cap.Consistency.Abstractions
;
using
Cap.Consistency.Infrastructure
;
using
Cap.Consistency.Routing
;
using
Confluent.Kafka
;
using
Confluent.Kafka.Serialization
;
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.Extensions.Logging
;
using
Microsoft.Extensions.Options
;
using
Cap.Consistency.Consumer.Kafka
;
using
Cap.Consistency.Internal
;
namespace
Cap.Consistency.Consumer
{
public
class
ConsumerHandler
:
IConsumerHandler
public
class
ConsumerHandler
<
T
>
:
IConsumerHandler
<
T
>
where
T
:
ConsistencyMessage
,
new
()
{
private
readonly
IServiceProvider
_serviceProvider
;
private
readonly
IConsumerInvokerFactory
_consumerInvokerFactory
;
private
readonly
IConsumerExcutorSelector
_selector
;
private
readonly
ILoggerFactory
_loggerFactory
;
private
readonly
ILogger
_logger
;
private
readonly
MethodMatcherCache
_selector
;
private
readonly
ConsistencyOptions
_options
;
private
readonly
ConsistencyMessageManager
<
T
>
_messageManager
;
public
event
EventHandler
<
T
>
MessageReceieved
;
public
ConsumerHandler
(
IServiceProvider
serviceProvider
,
IConsumerInvokerFactory
consumerInvokerFactory
,
IConsumerExcutorSelector
selector
,
ILoggerFactory
loggerFactory
)
{
ILoggerFactory
loggerFactory
,
ConsistencyMessageManager
<
T
>
messageManager
,
MethodMatcherCache
selector
,
IOptions
<
ConsistencyOptions
>
options
)
{
_selector
=
selector
;
_logger
=
loggerFactory
.
CreateLogger
<
ConsumerHandler
>();
_logger
=
loggerFactory
.
CreateLogger
<
ConsumerHandler
<
T
>
>();
_loggerFactory
=
loggerFactory
;
_serviceProvider
=
serviceProvider
;
_consumerInvokerFactory
=
consumerInvokerFactory
;
_options
=
options
.
Value
;
_messageManager
=
messageManager
;
}
protected
virtual
void
OnMessageReceieved
(
T
message
)
{
MessageReceieved
?.
Invoke
(
this
,
message
);
}
public
Task
RouteAsync
(
TopicRouteContext
context
)
{
...
...
@@ -40,47 +58,52 @@ namespace Cap.Consistency.Consumer
context
.
ServiceProvider
=
_serviceProvider
;
var
matchs
=
_selector
.
SelectCandidates
(
context
);
var
matchs
=
_selector
.
GetCandidatesMethods
(
context
);
var
groupingMatchs
=
matchs
.
GroupBy
(
x
=>
x
.
Value
.
GroupId
);
var
config
=
new
Dictionary
<
string
,
object
>
{
{
"group.id"
,
"simple-csharp-consumer"
},
{
"bootstrap.servers"
,
brokerList
}
};
using
(
var
consumer
=
new
Consumer
<
Null
,
string
>(
config
,
null
,
new
StringDeserializer
(
Encoding
.
UTF8
)))
{
//consumer.Assign(new List<TopicInfo> { new TopicInfo(topics.First(), 0, 0) });
foreach
(
var
matchGroup
in
groupingMatchs
)
{
using
(
var
client
=
new
KafkaConsumerClient
(
matchGroup
.
Key
,
_options
.
BrokerUrlList
))
{
client
.
MessageReceieved
+=
OnMessageReceieved
;
while
(
true
)
{
Message
<
Null
,
string
>
msg
;
if
(
consumer
.
Consume
(
out
msg
))
{
Console
.
WriteLine
(
$"Topic:
{
msg
.
Topic
}
Partition:
{
msg
.
Partition
}
Offset:
{
msg
.
Offset
}
{
msg
.
Value
}
"
);
foreach
(
var
item
in
matchGroup
)
{
client
.
Subscribe
(
item
.
Key
,
item
.
Value
.
Topic
.
Partition
);
}
client
.
Listening
(
TimeSpan
.
Zero
);
}
}
return
Task
.
CompletedTask
;
}
private
void
OnMessageReceieved
(
object
sender
,
DeliverMessage
message
)
{
T
consistencyMessage
=
new
T
()
{
Id
=
message
.
MessageKey
,
Payload
=
Encoding
.
UTF8
.
GetString
(
message
.
Body
)
};
_logger
.
LogInformation
(
"message receieved message topic name: "
+
consistencyMessage
.
Id
);
if
(
matchs
==
null
||
matchs
.
Count
==
0
)
{
_logger
.
LogInformation
(
"can not be fond topic route"
);
return
Task
.
CompletedTask
;
}
_messageManager
.
CreateAsync
(
consistencyMessage
);
var
executeDescriptor
=
_selector
.
SelectBestCandidate
(
context
,
matchs
);
try
{
var
executeDescriptor
=
_selector
.
GetTopicExector
(
message
.
MessageKey
);
context
.
Handler
=
c
=>
{
var
consumerContext
=
new
ConsumerContext
(
executeDescriptor
,
message
);
var
consumerContext
=
new
ConsumerContext
(
executeDescriptor
);
var
invoker
=
_consumerInvokerFactory
.
CreateInvoker
(
consumerContext
);
_logger
.
LogInformation
(
"consumer starting"
);
invoker
.
InvokeAsync
(
);
return
invoker
.
InvokeAsync
();
};
return
Task
.
CompletedTask
;
_messageManager
.
UpdateAsync
(
consistencyMessage
);
}
catch
(
Exception
ex
)
{
_logger
.
LogError
(
"exception raised when excute method : "
+
ex
.
Message
);
throw
ex
;
}
}
}
}
src/Cap.Consistency/Consumer/IConsumerClient.cs
0 → 100644
View file @
966f605b
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
namespace
Cap.Consistency.Consumer
{
public
interface
IConsumerClient
{
}
}
src/Cap.Consistency/Consumer/IConsumerHandler.cs
View file @
966f605b
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Cap.Consistency.Infrastructure
;
using
Cap.Consistency.Routing
;
namespace
Cap.Consistency.Consumer
{
public
interface
IConsumerHandler
:
ITopicRoute
public
interface
IConsumerHandler
<
T
>
:
ITopicRoute
where
T
:
ConsistencyMessage
,
new
()
{
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment