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
dc62bcb8
authored
5 years ago
by
dingsongjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成所有逻辑
parent
7ef7a1a7
master
…
v1.0.0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
44 additions
and
22 deletions
src/Pole.Sagas.Client/NotEndedSagasCompensateRetryBackgroundService.cs
src/Pole.Sagas.Client/Saga.cs
src/Pole.Sagas.Client/NotEndedSagasCompensateRetryBackgroundService.cs
View file @
dc62bcb8
using
Grpc.Core
;
using
Grpc.Core
;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.DependencyInjection
;
using
Microsoft.Extensions.Hosting
;
using
Microsoft.Extensions.Hosting
;
using
Microsoft.Extensions.Logging
;
using
Microsoft.Extensions.Options
;
using
Microsoft.Extensions.Options
;
using
Pole.Core.Serialization
;
using
Pole.Core.Serialization
;
using
Pole.Core.Utils.Abstraction
;
using
Pole.Core.Utils.Abstraction
;
...
@@ -21,11 +22,15 @@ namespace Pole.Sagas.Client
...
@@ -21,11 +22,15 @@ namespace Pole.Sagas.Client
private
readonly
PoleSagasOption
options
;
private
readonly
PoleSagasOption
options
;
private
readonly
SagaClient
sagaClient
;
private
readonly
SagaClient
sagaClient
;
private
readonly
SagaRestorer
sagaRestorer
;
private
readonly
SagaRestorer
sagaRestorer
;
public
NotEndedSagasCompensateRetryBackgroundService
(
IOptions
<
PoleSagasOption
>
options
,
SagaClient
sagaClient
,
IServiceProvider
serviceProvider
)
private
readonly
IEventSender
eventSender
;
private
readonly
ILogger
logger
;
public
NotEndedSagasCompensateRetryBackgroundService
(
IOptions
<
PoleSagasOption
>
options
,
SagaClient
sagaClient
,
IServiceProvider
serviceProvider
,
IEventSender
eventSender
,
ILogger
logger
)
{
{
this
.
options
=
options
.
Value
;
this
.
options
=
options
.
Value
;
this
.
sagaClient
=
sagaClient
;
this
.
sagaClient
=
sagaClient
;
sagaRestorer
=
new
SagaRestorer
(
serviceProvider
.
GetRequiredService
<
ISnowflakeIdGenerator
>(),
serviceProvider
,
serviceProvider
.
GetRequiredService
<
IEventSender
>(),
this
.
options
,
serviceProvider
.
GetRequiredService
<
ISerializer
>(),
serviceProvider
.
GetRequiredService
<
IActivityFinder
>());
sagaRestorer
=
new
SagaRestorer
(
serviceProvider
.
GetRequiredService
<
ISnowflakeIdGenerator
>(),
serviceProvider
,
serviceProvider
.
GetRequiredService
<
IEventSender
>(),
this
.
options
,
serviceProvider
.
GetRequiredService
<
ISerializer
>(),
serviceProvider
.
GetRequiredService
<
IActivityFinder
>());
this
.
eventSender
=
eventSender
;
this
.
logger
=
logger
;
}
}
public
async
Task
StartAsync
(
CancellationToken
cancellationToken
)
public
async
Task
StartAsync
(
CancellationToken
cancellationToken
)
...
@@ -36,30 +41,43 @@ namespace Pole.Sagas.Client
...
@@ -36,30 +41,43 @@ namespace Pole.Sagas.Client
{
{
if
(
stream
.
ResponseStream
.
Current
.
IsSuccess
)
if
(
stream
.
ResponseStream
.
Current
.
IsSuccess
)
{
{
var
sagas
=
stream
.
ResponseStream
.
Current
.
Sagas
.
Select
(
m
=>
try
{
{
var
result
=
new
SagaEntity
var
sagas
=
stream
.
ResponseStream
.
Current
.
Sagas
.
Select
(
m
=>
{
{
Id
=
m
.
Id
,
var
result
=
new
SagaEntity
};
{
result
.
ActivityEntities
=
m
.
Activities
.
Select
(
n
=>
new
ActivityEntity
Id
=
m
.
Id
,
{
};
CompensateTimes
=
n
.
CompensateTimes
,
result
.
ActivityEntities
=
m
.
Activities
.
Select
(
n
=>
new
ActivityEntity
ExecuteTimes
=
n
.
ExecuteTimes
,
{
Id
=
n
.
Id
,
CompensateTimes
=
n
.
CompensateTimes
,
Name
=
n
.
Id
,
ExecuteTimes
=
n
.
ExecuteTimes
,
Order
=
n
.
Order
,
Id
=
n
.
Id
,
ParameterData
=
n
.
ParameterData
.
ToByteArray
(),
Name
=
n
.
Id
,
SagaId
=
n
.
SagaId
,
Order
=
n
.
Order
,
Status
=
n
.
Status
ParameterData
=
n
.
ParameterData
.
ToByteArray
(),
SagaId
=
n
.
SagaId
,
Status
=
n
.
Status
}).
ToList
();
return
result
;
}).
ToList
();
}).
ToList
();
return
result
;
sagas
.
ForEach
(
async
sagaEntity
=>
}).
ToList
();
{
sagas
.
ForEach
(
async
sagaEntity
=>
var
saga
=
sagaRestorer
.
CreateSaga
(
sagaEntity
);
{
var
compensateResult
=
await
saga
.
CompensateWhenRetry
();
var
saga
=
sagaRestorer
.
CreateSaga
(
sagaEntity
);
if
(
compensateResult
)
await
saga
.
CompensateWhenRetry
();
{
});
var
expiresAt
=
DateTime
.
UtcNow
.
AddSeconds
(
options
.
CompeletedSagaExpiredAfterSeconds
);
await
eventSender
.
SagaEnded
(
sagaEntity
.
Id
,
expiresAt
);
}
});
}
catch
(
Exception
ex
)
{
logger
.
LogError
(
ex
,
"Errors in NotEndedSagasCompensateRetryBackgroundService CompensateRetry"
);
}
}
}
}
}
//await foreach (var getSagasResponse in stream.ResponseStream.ReadAllAsync(cancellationToken))
//await foreach (var getSagasResponse in stream.ResponseStream.ReadAllAsync(cancellationToken))
...
...
This diff is collapsed.
Click to expand it.
src/Pole.Sagas.Client/Saga.cs
View file @
dc62bcb8
...
@@ -131,6 +131,10 @@ namespace Pole.Sagas.Client
...
@@ -131,6 +131,10 @@ namespace Pole.Sagas.Client
return
true
;
return
true
;
}
}
await
RecursiveCompensateActivity
(
compensateActivity
);
await
RecursiveCompensateActivity
(
compensateActivity
);
if
(
activities
.
Any
(
m
=>
m
.
ActivityStatus
!=
ActivityStatus
.
Compensated
||
m
.
ActivityStatus
!=
ActivityStatus
.
CompensateAborted
))
{
return
false
;
}
return
true
;
return
true
;
}
}
...
...
This diff is collapsed.
Click to expand it.
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