Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j
Als je dit echt niet voor elkaar krijgt dan gooien simpelweg je statusveld gooien voor opstarten buiten .net om en het volgende statusbericht via een .net component gooien. Door dat component wordt .net geladen en klopt alles weer, minieme vertraging omdat je 1 extra functie aanroept maarja...
Wat is de rol van .NET hierin? Verzorgt een .NET application de communicatie naar MQ? Of is dit de server die wordt aangesproken?
Marrik
De IBM MQ client draait onder .NET (lokaal geinstalleerd op het workstation) en maakt verbinding met de WebSphere WMB servers voor de communicatie.marrik schreef op donderdag 16 oktober 2008 @ 23:14:
Volgens mij is het niet zozeer of .NET draait maar wordt er blijkbaar nog eea geladen door de runtime.
Wat is de rol van .NET hierin? Verzorgt een .NET application de communicatie naar MQ? Of is dit de server die wordt aangesproken?
De overhead van het versturen van een bericht vanaf de unmanaged Win32 omgeving via MQ en weer terug is :
- Creeren van de MQ client COM
- Starten van de standaard .NET omgeving (basis assemblies)
- Starten van de MQ client zelf binnen .NET
- Versturen bericht en ontvangen van antwoord en teruggeven aan de aanroeper (via COM) naar de Win32 omgeving
Bij de eerste aanroep zullen dus alle bovenstaande acties uitgevoerd worden. Herhaalde aanroepen daarna doorlopen de 2e en 3e stap niet omdat alles al in de lucht is.
Het zou dit wellicht beter zijn om te checken of de MQ client zelf binnen .NET live is. Maar ik heb geen idee of dat te detecteren is buiten .NET.
Ik kan eens kijken of ik de geladen IBM MQ modules kan vinden in de enumeratie.
Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j
Kan je niet gewoon beter in je app een queue/ aparte thread maken die het verstuurt wanneer het kan? Ik ken weinig situaties waarin 1x 3-6 seconden echt kritisch is zolang het maar niet de GUI/user experience beinvloed.
Elk bericht gooi je in de queue, en na versturen geef je een status terug in je overzicht. Zolang het niet de GUI beinvloed zie ik het probleem niet echt, bij snel 100 berichten invoeren ziet iemand een vertraging bij het 1e bericht, maar daarna wel 99 berichten achter elkaar gaan... Zolang je maar niet hangt op je 1e bericht gaat het volgens mij goed...
Enumeratie etc lijkt mij persoonlijk vrij riskant, straks hangt IBM het onder een ander project en je enumeratie kan opnieuw gemaakt worden...
[ Voor 6% gewijzigd door sopsop op 17-10-2008 10:08 ]
Dat is opzich toch prima hier? Tenzij er natuurlijk eerst iets gedaan moet worden met de response van een voorgaand bericht, voor een nieuw bericht verstuurd kan worden.sopsop schreef op vrijdag 17 oktober 2008 @ 10:08:
Het hele idee van MQ is toch dat het in weze een vorm is van shoot & forget. Je schiet wat in de queue bij de ontvanger en vervolgens hou je je reply queue in de gaten of er een reply is, of een timeout oid krijgt. Het is asynchrone communicatie.
Kater? Eerst water, de rest komt later
Ik denk hij bedoelt dat je een bericht verstuurd zonder dat je weet op de ontvangende partij in de lucht is. Je zet het bericht op de 'out queue' en op het moment dat het ontvangende systeem in de lucht is trekt deze de queue leeg.Haan schreef op vrijdag 17 oktober 2008 @ 12:18:
[...]
Dat is opzich toch prima hier? Tenzij er natuurlijk eerst iets gedaan moet worden met de response van een voorgaand bericht, voor een nieuw bericht verstuurd kan worden.
oogjes open, snaveltjes dicht
Dat klopt in het geval van Fire&Forget/confirm berichten. Echter heb ik het hier over Request-Reply berichten.sopsop schreef op vrijdag 17 oktober 2008 @ 10:08:
Het hele idee van MQ is toch dat het in weze een vorm is van shoot & forget. Je schiet wat in de queue bij de ontvanger en vervolgens hou je je reply queue in de gaten of er een reply is, of een timeout oid krijgt. Het is asynchrone communicatie.
Het proces (en ook de GUI) moet hier echt wachten op antwoord. De gebruiker mag/kan ondertussen niets doen. Het antwoord is cruciaal in het bepalen van het vervolg.
Een aparte thread heeft geen zin omdat de gebruiker moet wachten op de response. Het gebruikersproces moet die stap eerst door voordat het vervolg bepaald en ingezet gaat worden.Kan je niet gewoon beter in je app een queue/ aparte thread maken die het verstuurt wanneer het kan? Ik ken weinig situaties waarin 1x 3-6 seconden echt kritisch is zolang het maar niet de GUI/user experience beinvloed.
Het wel dan niet in de lucht zijn van de ontvangende partij wordt door MQ afgehandeld. Het response bericht zal evt foutmeldingen bevatten als het achterland niet up is of niet in de maximale wachttijd reageert.Ik denk hij bedoelt dat je een bericht verstuurd zonder dat je weet op de ontvangende partij in de lucht is. Je zet het bericht op de 'out queue' en op het moment dat het ontvangende systeem in de lucht is trekt deze de queue leeg.
Echter gaat het mij hier om de verbinding tussen de applicatie en de .NET IBM client welke ook overhead geeft.
Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j
Computer says no
Nvm dit had Gomez12 al gezegd
[ Voor 6% gewijzigd door urk_forever op 17-10-2008 15:59 ]
Hail to the king baby!
Ik heb een tijd geleden een aantal .NET componenten en services gemaakt die via 'amqmdnet.dll' connecten naar WMB. In sommige gevallen waren het fire en forget oplossingen en in andere gevallen moest ik wachten op een antwoord. (De WMB oplossing heb ik ook zelf ontwikkeld.)
Ik kan me alleen helemaal niet meer herinneren dat de eerste keer communicatie leggen lang duurde. Het initieeren van de MQQueueManager kost tijd, maar niet zolang als jij aangeeft.
Kun je a.u.b aangeven welke dll je gebruikt om vanuit .NET naar MQ te praten?
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Verwijderd
We zijn eraan gewend dat 't opstarten van een applicatie wat tijd kost, en 3-6 seconden extra is dan geen probleem.