Yes, it's possible. For this you need to create class of the task. I used it to create server-monitoring sheduled task, that send me eamil. For example, i have class, that contains parameters of futured monitoring tasks (like task-name, period, timestart, timefinish, activity, description and so on), and contain method to create task:

Method generateTask(ByRef out)
#define crlf $c(13,10)
#define quote $C(34)
err = ""
try {
className = ..#taskPath_"."_##this.Name
ObjClass = ##class(%Dictionary.ClassDefinition).%OpenId(className) ; Если такая задача есть - открываем и чистим
else {
ObjClass = ##class(%Dictionary.ClassDefinition).%New(className) ; иначе создаем новую
ObjClass.Super = "%SYS.Task.Definition"   Param = ##class(%Dictionary.ParameterDefinition).%New(ObjClass.Name_":TaskName") ; Параметр: имя задачи
Param.Default = ##this.Name
Param.Description = "Имя задачи"
ObjClass.Parameters.Insert(Param) Prop = ##class(%Dictionary.PropertyDefinition).%New(ObjClass.Name_":Active") ; Свойство: активность
Prop.Type ="%Boolean"
Prop.Description = "Флаг активности задачи"
Prop.Required = 1
ObjClass.Properties.Insert(Prop) Prop = ##class(%Dictionary.PropertyDefinition).%New(ObjClass.Name_":Email") ; Свойство: Почтовые адреса для рассылки
Prop.Type = "%String"
Prop.Description = "Почтовые адреса для рассылки"
  Prop = ##class(%Dictionary.PropertyDefinition).%New(ObjClass.Name_":MethodName") ; Свойство: Метод для запуска
Prop.Type = "%String"
Prop.Description = "Метод Cache из класса для запуска"
ObjClass.Properties.Insert(Prop) Prop = ##class(%Dictionary.PropertyDefinition).%New(ObjClass.Name_":ClassName") ; Свойство: Класс Cache с методом для запуска
Prop.Type = "%String"
Prop.Description = "Класс Cache с методом для запуска"
ObjClass.Properties.Insert(Prop) Prop = ##class(%Dictionary.PropertyDefinition).%New(ObjClass.Name_":Params") ; Свойство: Параметры запускаемого метода
Prop.Type = "%String"
Prop.Description = "Параметры запускаемого метода"
ObjClass.Properties.Insert(Prop) method = ##class(%Dictionary.MethodDefinition).%New(className_":OnTask") ; Метод. Основной метод задачи
method.Name = "OnTask"
method.ReturnType = "%Status"
code = ##class(%Stream.TmpCharacter).%New()
code.Write(" #define quote $C(34)"_$$$crlf)
code.Write(" q:'..Active $$$OK"_$$$crlf)
code.Write(" s st=$$$OK"_$$$crlf)
code.Write(" try {"_$$$crlf)
code.Write(" s err="""""_$$$crlf)
code.Write(" s msg="""""_$$$crlf)
code.Write(" ;формирование параметров выполнения метода:_____"_$$$crlf)
code.Write(" s jstring=""{"""_$$$crlf)
code.Write(" for i=1:1:$l(..Params,""~"") {"_$$$crlf)
code.Write(" s buf=$p(..Params,""~"",i)"_$$$crlf)
code.Write(" i i<$l(..Params,""~""){"_$$$crlf)
code.Write(" s:buf'="""" jstring=jstring_$$$quote_($p(buf,""="",1))_$$$quote_"":""_$p(buf,""="",2)_"","" "_$$$crlf)
code.Write(" }else{"_$$$crlf)
code.Write(" s:buf'="""" jstring=jstring_$$$quote_($p(buf,""="",1))_$$$quote_"":""_$p(buf,""="",2)"_$$$crlf)
code.Write(" }"_$$$crlf)
code.Write(" }"_$$$crlf)
code.Write(" s jstring=jstring_""}"""_$$$crlf)
code.Write(" s in={}.%FromJSON(jstring)"_$$$crlf)
code.Write(" s out={""error"":"""",""message"":"""",""subject"":""""}"_$$$crlf)
code.Write(" d $CLASSMETHOD(..ClassName,..MethodName,.in,.out)"_$$$crlf)
code.Write(" ;отправка письма:________________________________"_$$$crlf)
code.Write(" i ..Email'="""" {"_$$$crlf)
code.Write(" s mailIn={}"_$$$crlf)
code.Write(" s mailIn.subject= """""_$$$crlf)
code.Write(" s = ..Email"_$$$crlf)
code.Write(" s mailIn.message= ""<h3>Статус выполнения задачи по расписанию ""_..#TaskName_"" : ""_$Case(out.error,"""":""Выполнено"",$$$OK:""Выполнено"",:""Выполнено с ошибками"")_"" </h3>"""_$$$crlf)
code.Write(" s:(out.message'="""") mailIn.message=mailIn.message_""Результат: </br>""_out.message"_$$$crlf)
code.Write(" s mailIn.message= mailIn.message_""Класс: ""_..ClassName_"", метод: ""_..MethodName_""</br>"""_$$$crlf)
code.Write(" s:((out.error'="""")&(out.error'=$$$OK)) mailIn.message=mailIn.message_""Ошибка: ""_out.error_""</br>"""_$$$crlf)
code.Write(" s:(out.subject'="""") mailIn.subject=out.subject"_$$$crlf)
code.Write(" s:(out.from'="""") mailIn.from=out.from"_$$$crlf)
code.Write(" s mailIn.isHTML = 1"_$$$crlf)
code.Write(" s mailIn.attach = """""_$$$crlf)
code.Write(" d ##class(Lib.Util.Email).Send(.mailIn,.out)"_$$$crlf)
code.Write(" }"_$$$crlf)
code.Write(" } // try"_$$$crlf)
code.Write(" catch {s err=$ze}"_$$$crlf)
code.Write(" if err'="""" {s st=$$$ERROR($$$GeneralError,err)}"_$$$crlf)
code.Write(" q st"_$$$crlf)
ObjClass.Methods.Insert(method) ObjClass.%Save() status = $system.OBJ.Compile(className,"UBR-D",.errlog,1)
s:$System.Status.IsError(status) err=$SYSTEM.Status.GetErrorText(status)
catch exp {
err = ..ErrorDetect(.exp)
out.error = err

I think this guide needs to be updated, because of new versions of client and RabbitMQ Performance Testing Tool are avaliable. I used rabbitmq-perf-test 2.8.1 and amqp-client-5.7.3

I had problems with Runing HelloServer example, error was Could not find or load main class com.rabbitmq.examples.HelloServer, may be because there is no such classes in new versions of testing tool. And it seems like author forgot to specify that we need to copy runjava to bin client directory, not only *.jar file..

So I can't start hello-server example, please, help me.

What I need do to use it on Cache 2018 except Ensemble?

Hi Yuriy,

Not so far ago I was need such utilit, and i didn't find it, so I've written simple method, that converts xml-node from DOM-represented xml, may be it'll be usefull for you:

/// Метод генерации динамичекского объекта из ноды
/// Подчеркивания и дефисы в названиях тегов удаляются
ClassMethod NodeToDynObj(Node As %XML.Node) As %DynamicObject
 d Node.MoveToFirstChild(1)
 i (Node.NodeType = $$$xmlTEXTNODE) {
    s res = Node.NodeData
    d Node.MoveToParent(1)
    q res
 s res = {}
 do {
     s propertyName = $TR(Node.LocalName,"-_","")

     i ((Node.HasChildNodes(1)) && (Node.NodeType '=$$$xmlWHITESPACENODE) && (Node.NodeType '=$$$xmlTEXTNODE)){
         s value = ..NodeToDynObj(Node)
         d res.%Set(propertyName,value)
          s value = ""
          d Node.GetText(.value)
          d res.%Set(propertyName,value)
 } while Node.MoveToNextSibling(1)

 d Node.MoveToParent(1)
 q res