Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
丁松杰
/
Pole
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
fb922525
authored
Feb 20, 2020
by
dingsongjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix bug
parent
3806f429
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
21 additions
and
11 deletions
src/Pole.Core/Extensions/PoleServiceCollectionExtensions.cs
src/Pole.Core/Processor/PendingMessageRetryProcessor.cs
src/Pole.Core/UnitOfWork/UnitOfWork.cs
src/Pole.Core/Utils/InstanceIPV4_16IdGeneratorIdSolver.cs
src/Pole.EventStorage.PostgreSql/PostgreSqlEventStorageInitializer.cs
src/Pole.Core/Extensions/PoleServiceCollectionExtensions.cs
View file @
fb922525
...
...
@@ -17,7 +17,7 @@ namespace Microsoft.Extensions.DependencyInjection
{
public
static
class
PoleServiceCollectionExtensions
{
public
static
IServiceCollection
AddPole
(
this
IServiceCollection
services
,
Action
<
StartupConfig
>
config
)
public
static
IServiceCollection
AddPole
(
this
IServiceCollection
services
,
Action
<
StartupConfig
>
config
)
{
StartupConfig
startupOption
=
new
StartupConfig
(
services
);
if
(
startupOption
.
PoleOptionsConfig
==
null
)
...
...
@@ -30,7 +30,12 @@ namespace Microsoft.Extensions.DependencyInjection
services
.
AddScoped
<
IUnitOfWork
,
Pole
.
Core
.
UnitOfWork
.
UnitOfWork
>();
services
.
AddSingleton
<
ISerializer
,
DefaultJsonSerializer
>();
services
.
AddSingleton
<
IGeneratorIdSolver
,
InstanceIPV4_16IdGeneratorIdSolver
>();
services
.
AddSingleton
<
ISnowflakeIdGenerator
,
SnowflakeIdGenerator
>();
services
.
AddSingleton
<
IObserverUnitContainer
,
ObserverUnitContainer
>();
using
(
var
serviceProvider
=
services
.
BuildServiceProvider
())
{
var
generatorIdSolver
=
serviceProvider
.
GetService
<
IGeneratorIdSolver
>();
services
.
AddSingleton
(
typeof
(
ISnowflakeIdGenerator
),
factory
=>
new
SnowflakeIdGenerator
(
new
DateTime
(
2020
,
1
,
1
),
16
,
generatorIdSolver
.
GetGeneratorId
()));
}
services
.
AddSingleton
<
IProcessor
,
PendingMessageRetryProcessor
>();
services
.
AddSingleton
<
IProcessor
,
ExpiredEventsCollectorProcessor
>();
...
...
src/Pole.Core/Processor/PendingMessageRetryProcessor.cs
View file @
fb922525
...
...
@@ -17,17 +17,18 @@ namespace Pole.Core.Processor
{
private
readonly
IEventStorage
eventStorage
;
private
readonly
PoleOptions
options
;
private
readonly
IProducer
produc
er
;
private
readonly
IProducer
Container
producerContain
er
;
private
readonly
IEventTypeFinder
eventTypeFinder
;
private
readonly
ISerializer
serializer
;
private
readonly
ILogger
<
PendingMessageRetryProcessor
>
logger
;
private
readonly
ProducerOptions
producerOptions
;
public
PendingMessageRetryProcessor
(
IEventStorage
eventStorage
,
IOptions
<
PoleOptions
>
options
,
ILogger
<
PendingMessageRetryProcessor
>
logger
,
IProducer
producer
,
IEventTypeFinder
eventTypeFinder
,
ISerializer
serializer
,
IOptions
<
ProducerOptions
>
producerOptions
)
public
PendingMessageRetryProcessor
(
IEventStorage
eventStorage
,
IOptions
<
PoleOptions
>
options
,
ILogger
<
PendingMessageRetryProcessor
>
logger
,
IProducerContainer
producerContainer
,
IEventTypeFinder
eventTypeFinder
,
ISerializer
serializer
,
IOptions
<
ProducerOptions
>
producerOptions
)
{
this
.
eventStorage
=
eventStorage
;
this
.
options
=
options
.
Value
??
throw
new
Exception
(
$"
{
nameof
(
PoleOptions
)}
Must be injected"
);
this
.
logger
=
logger
;
this
.
producer
=
produc
er
;
this
.
producer
Container
=
producerContain
er
;
this
.
eventTypeFinder
=
eventTypeFinder
;
this
.
serializer
=
serializer
;
this
.
producerOptions
=
producerOptions
.
Value
??
throw
new
Exception
(
$"
{
nameof
(
ProducerOptions
)}
Must be injected"
);
...
...
@@ -70,6 +71,7 @@ namespace Pole.Core.Processor
pendingMessage
.
ExpiresAt
=
DateTime
.
UtcNow
;
}
pendingMessage
.
Retries
++;
var
producer
=
await
producerContainer
.
GetProducer
(
eventType
);
await
producer
.
Publish
(
bytes
);
pendingMessage
.
StatusName
=
nameof
(
EventStatus
.
Published
);
pendingMessage
.
ExpiresAt
=
DateTime
.
UtcNow
.
AddSeconds
(
options
.
PublishedEventsExpiredAfterSeconds
);
...
...
src/Pole.Core/UnitOfWork/UnitOfWork.cs
View file @
fb922525
...
...
@@ -18,15 +18,15 @@ namespace Pole.Core.UnitOfWork
{
class
UnitOfWork
:
IUnitOfWork
{
private
readonly
IProducer
produc
er
;
private
readonly
IProducer
Container
producerContain
er
;
private
readonly
IEventTypeFinder
eventTypeFinder
;
private
readonly
ISerializer
serializer
;
private
readonly
IEventStorage
eventStorage
;
private
readonly
PoleOptions
options
;
private
IBus
bus
;
public
UnitOfWork
(
IProducer
produc
er
,
IEventTypeFinder
eventTypeFinder
,
ISerializer
serializer
,
IEventStorage
eventStorage
,
IOptions
<
PoleOptions
>
options
)
public
UnitOfWork
(
IProducer
Container
producerContain
er
,
IEventTypeFinder
eventTypeFinder
,
ISerializer
serializer
,
IEventStorage
eventStorage
,
IOptions
<
PoleOptions
>
options
)
{
this
.
producer
=
produc
er
;
this
.
producer
Container
=
producerContain
er
;
this
.
eventTypeFinder
=
eventTypeFinder
;
this
.
serializer
=
serializer
;
this
.
eventStorage
=
eventStorage
;
...
...
@@ -45,6 +45,7 @@ namespace Pole.Core.UnitOfWork
var
eventContentBytes
=
serializer
.
SerializeToUtf8Bytes
(
@event
,
eventType
);
var
bytesTransport
=
new
EventBytesTransport
(
@event
.
Name
,
@event
.
Id
,
eventContentBytes
);
var
bytes
=
bytesTransport
.
GetBytes
();
var
producer
=
await
producerContainer
.
GetProducer
(
eventType
);
await
producer
.
Publish
(
bytes
);
@event
.
StatusName
=
nameof
(
EventStatus
.
Published
);
@event
.
ExpiresAt
=
DateTime
.
UtcNow
.
AddSeconds
(
options
.
PublishedEventsExpiredAfterSeconds
);
...
...
src/Pole.Core/Utils/InstanceIPV4_16IdGeneratorIdSolver.cs
View file @
fb922525
...
...
@@ -24,8 +24,10 @@ namespace Pole.Core.Utils
.
Select
(
c
=>
c
.
Address
)
.
FirstOrDefault
();
var
bytes
=
firstIpV4Address
.
GetAddressBytes
();
generatorId
=
BitConverter
.
ToInt32
(
bytes
,
2
);
var
bytes
=
firstIpV4Address
.
GetAddressBytes
().
TakeLast
(
2
).
Reverse
().
ToList
();
bytes
.
Add
(
0
);
bytes
.
Add
(
0
);
generatorId
=
BitConverter
.
ToInt32
(
bytes
.
ToArray
());
}
public
int
GetGeneratorId
()
{
...
...
src/Pole.EventStorage.PostgreSql/PostgreSqlEventStorageInitializer.cs
View file @
fb922525
...
...
@@ -15,7 +15,7 @@ namespace Pole.EventStorage.PostgreSql
{
private
readonly
PostgreSqlOptions
options
;
private
readonly
ILogger
logger
;
public
PostgreSqlEventStorageInitializer
(
IOptions
<
PostgreSqlOptions
>
options
,
Logger
<
PostgreSqlEventStorageInitializer
>
logger
)
public
PostgreSqlEventStorageInitializer
(
IOptions
<
PostgreSqlOptions
>
options
,
I
Logger
<
PostgreSqlEventStorageInitializer
>
logger
)
{
this
.
options
=
options
.
Value
;
this
.
logger
=
logger
;
...
...
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