Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Aug 26 21:52
    ryandanthony synchronize #673
  • Aug 26 21:52
    ryandanthony synchronize #673
  • Aug 26 20:16
    ryandanthony synchronize #673
  • Aug 26 20:08
    ryandanthony synchronize #673
  • Aug 26 20:03
    ryandanthony synchronize #673
  • Aug 26 18:24
    ryandanthony opened #673
  • Jul 07 12:19
    jeremydmiller labeled #669
  • Jul 07 12:19
    jeremydmiller labeled #668
  • Jul 07 12:19
    jeremydmiller labeled #667
  • Jul 07 12:19
    jeremydmiller labeled #666
  • Jul 07 12:19
    jeremydmiller labeled #665
  • Jul 07 12:11
    jeremydmiller commented #668
  • Jul 07 12:02
    jeremydmiller demilestoned #644
  • Jul 07 12:02
    jeremydmiller demilestoned #629
  • Jul 07 12:02
    jeremydmiller demilestoned #627
  • Jul 07 12:02
    jeremydmiller demilestoned #618
  • Jul 07 12:02
    jeremydmiller demilestoned #617
  • Jul 07 12:02
    jeremydmiller demilestoned #616
  • Jul 07 12:02
    jeremydmiller demilestoned #612
  • Jul 07 12:02
    jeremydmiller demilestoned #610
Anthony Acquah
@anthony.acquah_gitlab
Oh I see. I'll RTFM and work on the PRs. Thanks
Anthony Acquah
@tonymobster
For 1. would you mind if I change to a text column instead of VARCHAR(MAX)? And for 3. was it intentional that only DeadLetterEnvelope prepends schemaName to the table name?
Jeremy D. Miller
@jeremydmiller
it’s not purposeful. I think that’s okay to make the database change. It’s technically a breaking change, but I don’t think anybody uses it now
Anthony Acquah
@tonymobster
cool, i'll stick to varchar(max) to avoid the breaking change since switching to text doesn't provide much benefit. I'll add schema name to the others for consistency
Anthony Acquah
@tonymobster
This message was deleted
Anthony Acquah
@tonymobster
also the EnvelopeStatus enum mapped to varchar(25) in the script but ef core maps it to an int by default for postgres which causes the query to fail. I'll fix that as well
Jeremy D. Miller
@jeremydmiller
Oh, good catch. I hadn’t tested it w/ EF + Postgresql
Anthony Acquah
@anthony.acquah_gitlab
Submitted the PRs @jeremydmiller take a look whenever you have time
Jeremy D. Miller
@jeremydmiller
Will do
Hopefully today, but you know how that goes
Nico Sap
@NicoJuicy

I'm not sure on where i should ask questions about Domain Driven Design, but i'm currently a bit stuck and don't know where to ask.

Any advice on communication between bounded contexts in a monolith? I'm using the Application + Core + Infrastructure layer of the Clean Architecture.

Problem description: Basket Module has it's own context, but for AddBasketItemCommandHandler , will need a call to the GetProductByIdQuery. Which is in the Catalog Module. Since i'm also saving Product Information ( = Title, Weight, State, Pricen OldPrice).

Currently, i'm using mediator to do this and then map the product information it to the BasketItem.
So i add a reference from Basket.Application to Catalog.Application for this.

In a microservice, a httpclient to the CatalogApi would be created to fetch the information. From my POV i'm just eliminating the REST overhead.

Would this be correct? Have i overlooked something or can it be better?

abdulhye-doosan
@abdulhye-doosan
Hello @jeremydmiller .. we are trying to use LocalTransport to communicate in memory between different services. How can localtransport be used to communicate messages between different microservices within same process ?
abdulhye-doosan
@abdulhye-doosan
We have a container service , containing multiple micro-services that are each in their own host. We have created a wrapper around LocalTransport and injected it in contained microservices. Use Extension, like AzureServiceBus example to PublishMessagesToQueue and ToListenMessageFromQueue . our wrapper around LocalTransport introduces new protocol say myprotocol:// rest all implementation is that of LocalTransport
When we try to publish messages to queue, it says routing to particular queue url example: myprotocol://queue1 not found .. can you plz guide us where we can put breakpoints to debug this ?
Jeremy D. Miller
@jeremydmiller
@abdulhye-doosan What do you mean “different services in the same process”? Is this 2 .Net service classes in the same application bootstrapped with the same generic host? Or two separate IHost objects?
abdulhye
@abdulhye

@abdulhye-doosan What do you mean “different services in the same process”? Is this 2 .Net service classes in the same application bootstrapped with the same generic host? Or two separate IHost objects?

Two Separate IHost objects within same process

Jeremy D. Miller
@jeremydmiller
Yeah, there’s no facility for that. It’s not a static member. The local queues are singletons within the single IHost. Any reason why you have to have separate IHosts?
ndcomplete
@ndcomplete

Just to close this out and give some extra clarification (I work with abdul), the reason that we have separate hosts is because we've created a service who is able to start up multiple of our other microservices inside of it, so that we can do networkless/serializationless transport in some instances, such as long-term simulations.

We thought about throwing all the options into one big host, but were worried about crosstalk between the dependencies, for instance if two different services consume the same interfaced object. I briefly thought about using nested containers (I was one of the monsters that used them a bunch with StructureMap), but decided that was a rabbit hole we didn't necessarily want to go down.

We figured out what we were missing though: when making the sending agents, the handler pipelines were not getting shared with our custom transport implementation. We created a wrapper IHandlerPipeline which accepts multiple injected HandlerPipelines and connects them up in the single sender inside the SendingAgent. This is a biiiit of a hack, but seems to be working decently well. Still ironing out some of the kinks, such as making a different collection for each configured queue, but I think that will mainly be a performance benefit so it doesn't have to check every pipeline per message, as our messages are strongly typed (though I think the namespace gets pulled out of the type name, so that may not be any protection).

I'm going to try and get permission from on high to open source some of the work we're doing on this, as I think it's pretty interesting in some cases. Would definitely be interesting to see what you think on it!

Jarrod Johnson
@JarrodJ83
Has anyone ever converted ST results into a format that can be displayed in Jenkins Pipelines?
Jeremy D. Miller
@jeremydmiller
Not that I’m aware of. There’s a hook for formatting the console results that worked for TeamCity
Jarrod Johnson
@JarrodJ83
Thanks I'll check it out!
Jeremy D. Miller
@jeremydmiller
I won’t have bandwidth for Jasper anytime soon, but OpenTelemetry support and perf optimization is the last 2 things for a 2.0
Jarrod Johnson
@JarrodJ83
I'm doing some work with open telemetry and pulsar.client soon. If all goes well I would be open to trying to implement in jasper as well
Nico Sap
@NicoJuicy
Am i correct to assume Jasper is a good fit for using as a Saga ( that can be persisted) and plumbed with Mediator? ( since it's a monolith for now)
Jeremy D. Miller
@jeremydmiller
Yes, and I see your question in the Marten room. Jasper supports the Saga pattern w/ Marten being one of the persistence strategies. Jasper is also a superset of the MediatR functionality
Nico Sap
@NicoJuicy
Yeah indeed. Okay, thx
I remembered the repo of Oskardudycz, checked his repository and saw something very similar to what i wanted. So i posted it on 2 channels since i didn't saw him post here, perhaps not the best idea, sorry
Jeremy D. Miller
@jeremydmiller
No worries, I follow both rooms:)
ndcomplete
@ndcomplete
@jeremydmiller I have a set of merge requests coming in: one for Oakton.AspNetCore, then one for Jasper following. I'm going to wait for the Oakton one to be finished (if you decide to approve it), as it is a dependency for the Jasper change. If you'd like, I'd be happy to push up a branch with the majority of the Jasper changes required, with a stub for the Oakton update, so you can see the intent of the changes.
ndcomplete
@ndcomplete
Here's the jasper changeset. Note that in a further changeset I reverted some of the unnecessary changes (temporary oakton version change and language change):
ndcomplete/jasper@e6e4557
Mark Warpool
@CodingGorilla
@jeremydmiller I have an app that's using 1.1.4 and seems to be only running one handler at a time. I can see that it has 4 messages queued up in the incoming messages table, but my telemetry only shows it running one handler. Any quick thoughts on things to check to figure out why?
Mark Warpool
@CodingGorilla
Wondering if I need to explicitly set the MaximumThreads() to something greater than one, it looks like the ExecutionDataflowBlockOptions.MaxDegreeOfParallelism defaults to 1.
Jeremy D. Miller
@jeremydmiller
It should be defaulting to 5 in Jasper (super arbitrary number), but that wouldn’t impact how many handlers are known in the system. Can you resolve HandlerGraph and see if there’s more than the one handler?
It would super help right now if I had Oakton Describe() commands in there for Jasper :/
Mark Warpool
@CodingGorilla
Looking through the Jasper source, I can't see where it sets the MaxDegreeOfParallelism to anything other than what the default value for ExecutionDataflowBlockOptions is based on the default constructor.
The issue appears to be that it runs multiple handlers in parallel, but if I have 5 messages of one handler type, it runs those in sequence. Which lines up with the Dataflow library says I should expect (unless I'm missing something)
There's a sample where it's set to 5, but I don't see anything in Jasper itself that actually configures it
Jeremy D. Miller
@jeremydmiller
When you configure any listener, there’s a fluent interface that let’s you hcange the block options for that listener
I’ll look up the code after dinner, but the default in Jasper is 5 unless I’m crazy.
Look for MaximumThreads() in this: http://jasperfx.github.io/documentation/local/
Mark Warpool
@CodingGorilla
Yea, I see that and was aware of that. But as far as I can tell the Endpoint.ExecutionOptions (for which the .MaximumThreads() operates on) is only constructed by using the default constructor of the ExecutionDataflowBlockOptions and nowhere is the parallelism ever changed from what the defaults are.
Jeremy D. Miller
@jeremydmiller
Yes, and the MaximumThreads() method modifies that, right?
Mark Warpool
@CodingGorilla
Yes, but unless you call MaximumThreads() it will default to 1.
essentially meaning it defaults to .Sequential()
Jeremy D. Miller
@jeremydmiller
Oops, yeah. It used to be 5, but that must have gotten lost along the way
Have you set MaximumThreads() then? And that’s completely orthogonal to which handlers are running
Mark Warpool
@CodingGorilla
I have an update to set .MaximumThreads(-1) (unbounded) but I have to wait for it to empty out it's work queue so I don't stop it in the middle of processing a message.
Jeremy D. Miller
@jeremydmiller
You can’t change that when the app is running, only upfront
Mark Warpool
@CodingGorilla
Yea, I need to stop the app and redeploy, but it's a data importer, so if I stop it in the middle of a message, I will likely end up with duplicated imports.