Monthly Archives: Березень 2014

Робота з чергами повідомлень MSMQ в PowerShell

Інсталяція сервісу MSMQ

(1) Зайти в панель керування, (2) Programs and features, (3) натиснути Turn windows features on and off, (4) розкрити дерево до Microsoft Queue Message Server Core і увімкнути пункти “MSMQ HTTP Support” та “MSMQ Active Directory Domain Services Integration”, якщо ви в домені. (5) – Натиснути OK.

MSMQInstall

Операції

Перелічити черги:

Get-MsmqQueue | Select QueueName, MessageCount # дає деякі черги і кількість повідомлень
Get-WmiObject Win32_PerfFormattedData_msmq_MSMQQueue | Select Name, MessagesinQueue # дає трохи більше черг

Створити чергу:

$queue = New-MsmqQueue queue_name

Отримати існуючу чергу за іменем:

$queue = Get-MsmqQueue queue_name

Послати повідомлення в чергу $queue:

$msg = New-MsmqMessage "Hello world!"
Send-MsmqQueue -Name $queue.Path -MessageObject $msg

Послати тисячу повідомлень в чергу за 10000 секунд, при цьому відображаючи їх кількість в реальному часі:

function send_message($msg_text, $queue_name)
{
	$msg = New-MsmqMessage $msg_text
	$queue = Get-MsmqQueue $queue_name
	Send-MsmqQueue -Name $queue.Path -MessageObject $msg | Out-Null
	
	Clear-Host
	Get-MsmqQueue -Name $queue_name | Format-Table QueueName, MessageCount
	Start-Sleep -s 10
}
for($i=0; $i -le 1000; $i++) { send_message $i $queue_name }

Очистити чергу $queue від повідомлень:

Clear-MSMQQueue -InputObject $queue

Видалити чергу повідомлень $queue:

Remove-MSMQQueue -InputObject $queue

Посилання


Filed under: Кодерство Tagged: windows

Стиль – це результат гіркого досвіду

Imports should usually be on separate lines. (PEP8)

Колись давно, десь три роки тому, всередині фрейморку Zope якийсь добрий чоловік зробив отаку зміну.

Якщо конкретно, то мені в ній найбільше сподобалось оце:

І зараз я з прикладом поясню чому менше рядків краще лише в тому випадку коли рядки при цьому не стають довшими. Нехай ми працюємо з версією Zope зробленою ще до цього коміта і маємо трейс:

Переконуємось що App.special_dhtml містить клас DTMLFile. Значить причина помилки при імпорті в тому що код модуля не встигає прогнатись аж до того місця де йому кажуть створити цей клас. Методом дихотомії визначаємо що проблема в рядку 14:

import DocumentTemplate, Common, Persistence, MethodObject, Globals, os, sys

Десь тут виникає той самий ImportError, але рядок надто довгий аби точно знати де. Доведеться переписати аби рядків було більше. Далі import pdb; pdb.set_trace(); n n n n n ..., бачимо що винен модуль Globals, який імпортує App, а щоб імпортувати App, треба імпортувати special_dhtml, імпортом якого ми зараз займаємось.

Бачимо що й без нього можна обійтись, видаляємо імпорт, отримуємо наступну помилку.

The show must go on
I’ll face it with a grin
I’m never giving in
On – with the show
I’ll top the bill, I’ll overkill

Ну ви зрозуміли ;)


Filed under: Кодерство Tagged: Python