sql-server - 如何在 Spring Data JPA 中从 SQL Server 队列中获取消息
问题描述
我正在使用包含队列即 queueXXX 的 SQL Server 数据库。
我想从 Spring data JPA 运行以下代码并从队列中返回消息列表。
declare @result table(
[message_body] varbinary(MAX)
, [message_type_name] nvarchar(256)
, [validation] nchar(2)
, [message_enqueue_time] datetime
, [conversation_handle] uniqueidentifier
);
waitfor (
receive top (1) [message_body], [message_type_name], [validation], [message_enqueue_time], [conversation_handle]
from queueXXX
into @result
), timeout 10000;
declare @c uniqueidentifier = (select top 1 [conversation_handle] from @result);
-- End the conversation so sending a message back to the sender who will close
-- their side of the conversation.
--
if @c is not null
end conversation @c;
-- Only return the first row as we will not have any other messages
select top 1 [message_body], LTRIM(RTRIM([message_type_name])) as [message_type_name], LTRIM(RTRIM([validation])) as [validation], [message_enqueue_time], [conversation_handle] from @result;
我尝试了以下方法来完成这项工作。但它不起作用。
@Repository
public class QueueReaderDao {
@PersistenceContext
EntityManager entityManager;
public void readQueue(){
Query q =entityManager.createNamedQuery("declare @result table( " +
" [message_body] varbinary(MAX) " +
" , [message_type_name] nvarchar(256) " +
" , [validation] nchar(2) " +
" , [message_enqueue_time] datetime " +
" , [conversation_handle] uniqueidentifier " +
"); " +
" " +
"waitfor ( " +
" receive top (1) [message_body], [message_type_name], [validation], [message_enqueue_time], [conversation_handle] " +
" from queueXXX " +
" into @result " +
"), timeout 10000; " +
" " +
"declare @c uniqueidentifier = (select top 1 [conversation_handle] from @result); " +
" " +
"-- End the conversation so sending a message back to the sender who will close " +
"-- their side of the conversation. " +
"-- " +
"if @c is not null " +
" end conversation @c; " +
" " +
"-- Only return the first row as we will not have any other messages " +
"select top 1 [message_body], LTRIM(RTRIM([message_type_name])) as [message_type_name], LTRIM(RTRIM([validation])) as [validation], [message_enqueue_time], [conversation_handle] from @result;");
q.getResultList();
System.out.println("query works");
}
任何形式的帮助都将受到高度赞赏。
解决方案
推荐阅读
- spacy - spaCy CLI 训练 NER 中的 P、R 和 F 分数是如何计算的?
- c++ - 尝试使用矩阵在 C++ 中实现 Durand-Kerner-Method
- security - 使用 HSM 存储“主密钥” - 如何?
- python - 如何从 Django 中另一个应用程序中的模型访问related_name?
- c - C 中 fread () 和 fwrite () 函数的问题
- r - 我将如何在 R 中指定这个函数(数学公式)?
- volttron - VOLTTRON 安装在 rasbian buster 上
- snowflake-cloud-data-platform - 用于检索在列表的任何元素中包含字符串的 JSON 的雪花查询
- python-3.x - python中的绝对文件夹路径
- html - 通过 CSS 在 Adobe XD 和 Web 上 Work Sans 字体的外观不同