연습: 큐 만들기 및 메시지 작업
업데이트: 2007년 11월
이 항목의 단계에서는 MessageQueue 구성 요소를 사용하여 메시지 큐를 만드는 방법을 보여 줍니다. 이 구성 요소를 사용하여 메시지 큐로 메시지를 보내거나 메시지 큐에서 메시지를 검색합니다. 메시지에서는 도움말 요청을 기록합니다.
![]() |
---|
서버 탐색기에서 큐 정보를 보거나 프로그래밍 방식으로 큐에 액세스하려면 클라이언트 컴퓨터에 메시지 큐 Windows 구성 요소를 설치해야 합니다. 이 서비스를 추가하려면 제어판에서 프로그램 추가/제거를 사용합니다. |
![]() |
---|
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
컴퓨터에 메시지 큐를 만들려면
파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
새 프로젝트 대화 상자에서 Visual Basic 또는 Visual C#Windows 응용 프로그램을 만듭니다. 이름을 MessageQ로 지정합니다.
서버 탐색기를 엽니다. 자세한 내용은 방법: 서버 탐색기/데이터베이스 탐색기 액세스 및 초기화를 참조하십시오.
서버 노드를 확장합니다.
로컬 서버의 노드를 확장합니다. 로컬 서버의 노드는 컴퓨터 이름으로 식별합니다.
메시지 큐 노드를 확장합니다.
개인 큐를 마우스 오른쪽 단추로 클릭한 다음 큐 만들기를 클릭합니다.
큐 이름에 HelpRequest라고 입력합니다. 트랜잭션 큐 만들기를 선택하지 마십시오.
HelpRequest라는 새 개인 큐가 만들어져 서버 탐색기에 나타납니다.
참고:
새로 만든 큐를 내 컴퓨터 아이콘을 통해 볼 수도 있습니다. 바탕 화면의 내 컴퓨터 아이콘을 마우스 오른쪽 단추로 클릭한 다음 관리를 클릭합니다. 서비스 및 응용 프로그램 노드를 확장합니다. 메시지 큐 노드를 확장하여 개인 큐 폴더를 선택합니다. 큐 목록에 새 큐가 표시됩니다.
메시지 큐에 대한 MessageQueue 구성 요소를 추가하려면
서버 탐색기에서 HelpRequest 큐를 폼으로 끌어 옵니다. HelpRequest 큐에 대해 구성된 새 MessageQueue 구성 요소가 프로젝트에 추가됩니다.
MessageQueue 구성 요소는 이전 단원에서 만든 HelpRequest 큐에 포함된 메시지에 프로그래밍 방식으로 액세스하는 데 사용합니다.
MessageQueue 구성 요소의 (Name) 속성을 helpRequestQueue로 설정합니다.
속성 창에서 MessageReadPropertyFilter 노드를 확장합니다. Priority의 값을 true로 설정합니다. 그러면 큐에서 메시지를 검색할 때 메시지의 우선 순위가 검색됩니다.
다음 단계에서 만드는 사용자 인터페이스를 사용하면 사용자가 도움말 요청을 위한 텍스트를 입력하고 메시지의 우선 순위를 설정할 수 있습니다. 사용자는 보내기 단추를 클릭하여 요청을 큐로 전송합니다. DataGridView 컨트롤에는 큐의 내용이 표시됩니다. 사용자 인터페이스에는 모눈을 큐의 현재 내용으로 업데이트하는 단추와 큐를 비우는 단추도 있습니다.
사용자 인터페이스를 만들려면
도구 상자의 Windows Forms 탭에서 Form1에 다음 컨트롤을 추가합니다.
Label 컨트롤 두 개
TextBox 컨트롤 두 개
Button 컨트롤 세 개
CheckBox 컨트롤 하나
DataGridView 하나
컨트롤의 속성을 다음과 같이 설정합니다.
컨트롤
속성
새 값
Label1
이름
Label2
Message
TextBox1
txtName
(비어 있음)
TextBox2
txtMessage
(비어 있음)
true
Button1
sendMessage
Send message
Button2
refreshMessages
Refresh message list
Button3
purgeMessages
Purge message list
CheckBox1
highPriority
High priority
DataGridView1
messageGrid
컨트롤을 순서대로 정렬합니다.
큐에 메시지를 보내려면
디자이너에서 sendMessage 단추를 두 번 클릭하여 코드 편집기에서 Click 이벤트 처리기를 만듭니다.
새 Message 인스턴스를 만들어 큐로 보내고 메시지 표시를 업데이트하는 다음 코드를 메서드에 추가합니다. DisplayMessages 메서드는 다음 단계에서 작성합니다.
Private Sub sendMessage_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles sendMessage.Click Dim theMessage As System.Messaging.Message = _ New System.Messaging.Message(Me.txtMessage.Text) theMessage.Label = Me.txtName.Text If highPriority.Checked Then theMessage.Priority = Messaging.MessagePriority.Highest Else theMessage.Priority = Messaging.MessagePriority.Normal End If helpRequestQueue.Send(theMessage) DisplayMessages() End Sub
private void sendMessage_Click(object sender, System.EventArgs e) { System.Messaging.Message theMessage = new System.Messaging.Message(txtMessage.Text); theMessage.Label = txtName.Text; if (highPriority.Checked) theMessage.Priority = System.Messaging.MessagePriority.Highest; else theMessage.Priority = System.Messaging.MessagePriority.Normal; helpRequestQueue.Send(theMessage); DisplayMessages(); }
프로젝트에 System.Data에 대한 참조를 추가합니다. System.Data에 대해 Imports 문(.NET 네임스페이스 및 형식)(Visual Basic) 또는 using(C# 참조) 문을 추가합니다. 자세한 내용은 참조 관리 및 방법: Visual Studio에서 참조 추가 또는 제거(Visual Basic)를 참조하십시오.
DataGridView 컨트롤에 큐의 내용을 표시하는 메서드를 추가합니다. 이 메서드에서는 MessageQueue.GetAllMessages 메서드를 사용하여 큐에서 모든 메시지를 검색합니다. 선택한 큐 속성은 DataGridView 컨트롤의 데이터 소스로 사용되는 DataTable 개체에 추가됩니다. 메시지의 텍스트를 검색하려면 메시지에 대한 포맷터를 만들어야 합니다.
Private Sub DisplayMessages() ' Create a DataTable Dim messageTable As New DataTable() messageTable.Columns.Add("Name") messageTable.Columns.Add("Message") messageTable.Columns.Add("Priority") Dim messages() As System.Messaging.Message messages = helpRequestQueue.GetAllMessages() ' Need a formatter to get the text of the message body. Dim stringFormatter As System.Messaging.XmlMessageFormatter = _ New System.Messaging.XmlMessageFormatter(New String() _ {"System.String"}) Dim index As Integer Dim am As System.Messaging.Message ' Add each message to the DataTable For index = 0 To messages.Length - 1 messages(index).Formatter = stringFormatter am = messages(index) messageTable.Rows.Add(New String() _ {am.Label, am.Body.ToString(), am.Priority.ToString()}) Next messageGrid.DataSource = messageTable End Sub
private void DisplayMessages() { DataTable messageTable = new DataTable(); messageTable.Columns.Add("Name"); messageTable.Columns.Add("Message"); messageTable.Columns.Add("Priority"); System.Messaging.Message[] messages; messages = helpRequestQueue.GetAllMessages(); System.Messaging.XmlMessageFormatter stringFormatter; stringFormatter = new System.Messaging.XmlMessageFormatter( new string[] {"System.String"}); for (int index = 0; index < messages.Length; index++) { messages[index].Formatter = stringFormatter; messageTable.Rows.Add(new string[] { messages[index].Label, messages[index].Body.ToString(), messages[index].Priority.ToString() }); } messageGrid.DataSource = messageTable;
}
큐의 내용을 표시하려면
디자이너에서 refreshMessage 단추를 두 번 클릭하여 코드 편집기에서 Click 이벤트 처리기를 만듭니다.
Click 이벤트 처리기에서 DisplayMessages 메서드를 호출합니다.
Private Sub refreshMessages_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles refreshMessages.Click DisplayMessages() End Sub
private void refreshMessages_Click(object sender, System.EventArgs e) { DisplayMessages();
}
큐의 내용을 비우려면
디자이너에서 purgeMessage 단추를 두 번 클릭하여 코드 편집기에서 Click 이벤트 처리기를 만듭니다.
helpRequestQueue의 Purge 메서드를 호출한 다음 DataGridView 컨트롤의 내용을 새로 고칩니다.
Private Sub purgeMessages_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles purgeMessages.Click helpRequestQueue.Purge() DisplayMessages() End Sub
private void purgeMessages_Click(object sender, System.EventArgs e) { helpRequestQueue.Purge(); DisplayMessages();
}
응용 프로그램을 테스트하려면
F5 키를 눌러 응용 프로그램을 실행합니다.
이름과 간단한 메시지를 입력합니다.
Send message를 클릭하여 메시지를 큐에 보내고 화면 표시를 업데이트합니다.
Purge message list를 클릭하여 큐에 있는 메시지를 모두 삭제합니다. 그러면 메시지 목록이 비워집니다.
참고 항목
작업
방법: MessageQueue 구성 요소 인스턴스 만들기