Skip to content

Commit 3f4f349

Browse files
committed
modify fetched message method without delete queue message when get queue message.
1 parent 6d5c771 commit 3f4f349

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

src/DotNetCore.CAP.MySql/MySqlFetchedMessage.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ namespace DotNetCore.CAP.MySql
77
public class MySqlFetchedMessage : IFetchedMessage
88
{
99
private readonly MySqlOptions _options;
10+
private readonly string _processId;
1011

11-
public MySqlFetchedMessage(int messageId, MessageType type, MySqlOptions options)
12+
public MySqlFetchedMessage(int messageId, MessageType type, string processId, MySqlOptions options)
1213
{
1314
MessageId = messageId;
1415
MessageType = type;
1516

17+
_processId = processId;
1618
_options = options;
1719
}
1820

@@ -22,15 +24,19 @@ public MySqlFetchedMessage(int messageId, MessageType type, MySqlOptions options
2224

2325
public void RemoveFromQueue()
2426
{
25-
// ignored
27+
using (var connection = new MySqlConnection(_options.ConnectionString))
28+
{
29+
connection.Execute($"DELETE FROM `{_options.TableNamePrefix}.queue` WHERE `ProcessId`=@ProcessId"
30+
, new { ProcessId = _processId });
31+
}
2632
}
2733

2834
public void Requeue()
2935
{
3036
using (var connection = new MySqlConnection(_options.ConnectionString))
3137
{
32-
connection.Execute($"insert into `{_options.TableNamePrefix}.queue`(`MessageId`,`MessageType`) values(@MessageId,@MessageType);"
33-
, new {MessageId, MessageType });
38+
connection.Execute($"UPDATE `{_options.TableNamePrefix}.queue` SET `ProcessId`=NULL WHERE `ProcessId`=@ProcessId"
39+
, new { ProcessId = _processId });
3440
}
3541
}
3642

src/DotNetCore.CAP.MySql/MySqlStorageConnection.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ public async Task<CapPublishedMessage> GetPublishedMessageAsync(int id)
4141

4242
public Task<IFetchedMessage> FetchNextMessageAsync()
4343
{
44+
var processId = ObjectId.GenerateNewStringId();
4445
var sql = $@"
4546
UPDATE `{_prefix}.queue` SET `ProcessId`=@ProcessId WHERE `ProcessId` IS NULL LIMIT 1;
46-
SELECT `MessageId`,`MessageType` FROM `{_prefix}.queue` WHERE `ProcessId`=@ProcessId;
47-
DELETE FROM `{_prefix}.queue` WHERE `ProcessId`=@ProcessId";
47+
SELECT `MessageId`,`MessageType` FROM `{_prefix}.queue` WHERE `ProcessId`=@ProcessId;";
4848

49-
return FetchNextMessageCoreAsync(sql, new { ProcessId = Guid.NewGuid().ToString() });
49+
return FetchNextMessageCoreAsync(sql, processId);
5050
}
5151

5252
public async Task<CapPublishedMessage> GetNextPublishedMessageToBeEnqueuedAsync()
@@ -139,18 +139,18 @@ public bool ChangeReceivedState(int messageId, string state)
139139
}
140140
}
141141

142-
private async Task<IFetchedMessage> FetchNextMessageCoreAsync(string sql, object args = null)
142+
private async Task<IFetchedMessage> FetchNextMessageCoreAsync(string sql, string processId)
143143
{
144144
FetchedMessage fetchedMessage;
145145
using (var connection = new MySqlConnection(Options.ConnectionString))
146146
{
147-
fetchedMessage = await connection.QuerySingleOrDefaultAsync<FetchedMessage>(sql, args);
147+
fetchedMessage = await connection.QuerySingleOrDefaultAsync<FetchedMessage>(sql, new { ProcessId = processId });
148148
}
149149

150150
if (fetchedMessage == null)
151151
return null;
152152

153-
return new MySqlFetchedMessage(fetchedMessage.MessageId, fetchedMessage.MessageType, Options);
153+
return new MySqlFetchedMessage(fetchedMessage.MessageId, fetchedMessage.MessageType, processId, Options);
154154
}
155155

156156
public void Dispose()

0 commit comments

Comments
 (0)