가 나는 폴링에 나는 '이대안
SELECT *
FROM mydb
WHERE SYSUTCDATE() >= timestamp
같은 테이블이 어떤 대안을 내 Windows 서비스는 타임 스탬프를 기반으로 처리해야 내가 궁금해서 예약 된 작업을 포함하는 MSSQL 테이블이 아마도 적어도 매 5 초마다 테이블을 폴링해야 할 것입니다. 기본적으로 테이블의 타임 스탬프로 설정된 시간에 Windows 서비스가 데이터를 처리하기를 원합니다.
나에게 이것은 가장 효과적인 방법처럼 보이지 않습니다. 나는 이미 DML & CLR 트리거를 조사해 보았습니다. 데이터가 바뀌면 타임 스탬프가 지났을 때와 달리 작동하지 않을 것이라고 생각합니다. 생각?
업데이트 2 :
내가 더 자세히 그것을 설명하려고합니다 그래서 전화 "예약 된 작업"표현의 빈약 한 선택 이었다는 것을 깨달았다.
이 프로젝트의 목표는 비즈니스 로직에 따라 사람들에게 전화 알림을 전송하는 것입니다. 한 시나리오는 내부 이벤트를 기반으로 특정 시간에 여러 사람이 전화를해야한다는 것입니다. 전화를받는 방법에 따라 같은 사람을 여러 번 호출 할 수 있습니다. 따라서 사물을 단순화하고 각 전화 상태를 관리하는 복잡성과 오버 헤드를 제거하기 위해 각 전화 통화를 테이블에 입력하여 사전 예약하는 것이 좋습니다. 알림을 중지해야하는 경우 보류중인 전화가 테이블에서 삭제됩니다. 이렇게하면 Windows 서비스의 디자인을 매우 간단하게 유지할 수 있습니다. 모든 작업은 테이블의 타임 스탬프를 기반으로 알림을 보냅니다.
업데이트 1 :
Message Queue는
내가 보낸 사람이 적절한 시간에 큐에 메시지를 넣어하는 방법을 알아 냈하지 않았습니다.
SqlDependency
내가 Detecting Changes with SqlDependency에서 예제 코드를 사용하여 문제가 발생하고있다. 어떤 이유로 OnChange 이벤트는 처음에만 시작되며 이후에는 아무 것도 발생하지 않습니다.
업데이트 : 테이블의 데이터가 트리거 실행을 변경하지 않으므로 SqlDependency가 작동하지 않을 것이라고 생각합니다.
void Initialization()
{
// Create a dependency connection.
SqlDependency.Start(connectionString, queueName);
}
void SomeMethod()
{
// Assume connection is an open SqlConnection.
// Create a new SqlCommand object.
using (SqlCommand command=new SqlCommand(
"SELECT timestamp,othercolumn FROM mydb WHERE SYSUTCDATE() >= timestamp",
connection))
{
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency=new SqlDependency(command);
// Maintain the refence in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
대신 메시지 대기열을 사용 해본 적이 있습니까? – recursive
SqlDependency 시도 : http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx –
이러한 작업을 SQL Server 에이전트를 통해 작업으로 바꾸는 것이 좋습니다. –