Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Aug 18 10:25
    biohazard999 closed #632
  • Aug 18 10:25
    biohazard999 commented #632
  • Aug 04 16:33
    TheFellow opened #668
  • Jul 30 00:06
    TheFellow opened #667
  • Jul 30 00:01
    TheFellow edited #666
  • Jul 28 21:42
    TheFellow opened #666
  • Jul 21 00:33
    TheFellow opened #665
  • Jul 20 22:06

    jeremydmiller on master

    Apply configurations when updat… Pulsar allows native scheduled … Rename classes to be specific t… and 5 more (compare)

  • Jul 20 22:06
    jeremydmiller closed #664
  • Jul 20 22:04

    jeremydmiller on master

    Make exception_message and exce… Prepend all jasper tables with … Fix typo (compare)

  • Jul 20 22:04
    jeremydmiller closed #659
  • Jun 30 13:41
    JarrodJ83 review_requested #664
  • Jun 24 15:11
    JarrodJ83 opened #664
  • Jun 23 11:14

    JarrodJ83 on pulsar-cleanup

    Add Kafka readme and example (compare)

  • Jun 23 00:32

    JarrodJ83 on pulsar-cleanup

    Ignore tests not applicabale to… Implement KafkaCallbackChannel (compare)

  • Jun 22 23:39

    JarrodJ83 on pulsar-cleanup

    Update pkg details Implement DotPulsar channel cal… (compare)

  • Jun 22 17:53

    JarrodJ83 on pulsar-cleanup

    Apply configurations when updat… Pulsar allows native scheduled … Rename classes to be specific t… (compare)

  • Jun 15 12:15

    jeremydmiller on master

    Optional Parallel Rabbit MQ lis… (compare)

  • Jun 04 20:51
    JarrodJ83 commented #629
  • Jun 04 20:51
    JarrodJ83 commented #629
Jeremy D. Miller
@jeremydmiller
Would it help to have some kind of AllAreDurable()or something like that to just make all the endpoints be durable?
Anthony Acquah
@tonymobster
to make all queues registered within the closure durable? Yeah that would be nice
I think that makes sense for apps like mine, where I just want to queue some work to run durably in the background from my controllers
all in a single app, so I want durable listeners but no outbox support for publishing since it's just publishing to itself in-memory
Jeremy D. Miller
@jeremydmiller
So that message isn’t a huge concern, but it’s still annoying. I can look into it a bit on my end
Anthony Acquah
@tonymobster
yes it isn't a concern really, it just occurs every single time so was curious especially since i'm not using the outbox so there shouldn't be any work for it to drain
but it's no deal breaker
thanks for the feedback
and the awesome frameworks
Jeremy D. Miller
@jeremydmiller
Every time you send or process a message there’s going to be some DB activity though
Anthony Acquah
@tonymobster
oh ok
even sending without outbox support? Processing via durable queues I expect that
but I though I could sending to a queue without outbox support worked kinda like the in-memory mediator mode?
Jeremy D. Miller
@jeremydmiller
Pretty well the same thing. If it’s durable, Jasper is persisting the message until it’s successfully processed, then deleting it. It’s trying to achieve guaranteed delivery locally
Anthony Acquah
@anthony.acquah_gitlab
Got it
Anthony Acquah
@tonymobster
Jeremy D. Miller
@jeremydmiller
Yup.
I think that’ll make a big difference for things like validation. Already seen somebody doing an INotifyPropertyChanged implementation with it
Anthony Acquah
@tonymobster
:+1:
the design and rationale behind it is a bit like jasper middleware/lamar codegeneration
Jeremy D. Miller
@jeremydmiller
Definitely. I’ve know the source generator thing was coming. So far though, I don’t know that it’s going to apply to Jasper. Maybe to short circuit type discovery
Jasper / Lamar actually does have a model to pre-generate the code ahead of time, then discover the handler classes from the assembly at runtime
Mark Warpool
@CodingGorilla
@jeremydmiller If you get a chance, could you take a look at #655 , I keep bumping into this issue.
Jeremy D. Miller
@jeremydmiller
@CodingGorilla v1.1.4 will have that PR as soon as Nuget catches up. Sorry for the delay
Mark Warpool
@CodingGorilla
No problem, thanks for the quick turn around!
Anthony Acquah
@tonymobster

@jeremydmiller I think i found a few issues with the ef core/postgres storage support

  1. The creation sql script uses VARCHAR(250) columns which causes inserts to fail in the dead letter table when messages exceed the 250 chars limit. This causes lots of retries every few seconds(probably stops after some max retry limit. Also the exception details has "IsTransient": false is there a way to check that to decide if it should be retried?) which constantly fail.

  2. The creation script is run on app startup(I'm not sure under which conditions) and it seems to do some sort of schema compare so even though my initial ef core migration uses text columns and even when I manually modify it in the database they get dropped and recreated when the app restarts.

  3. The ef core MapEnvelopeStorage function uses map.ToTable($"{schemaName}.jasper_dead_letters"); with a default schema name of "dbo" which when set or changed to a new value and used in conjunction with ef core snake case name translation creates a table named schemaName_jasper_dead_letters(the schema name becomes part of the table name) which means on app startup it ignores this table and creates a new table named public.jasper_dead_letters(which is right) with the restrictive column length defaults. Calling the MapEnvelopeStorage function with an empty string fixes the above table name "issue" but app startup still recreates the table with the restrictive defaults.

Jeremy D. Miller
@jeremydmiller
1.) I’ll happily take a PR to set that to max
2.) That’s documented. You have to opt into that behavior, so you’ve got that configured somewhere in your application. I think the example apps show you how to just enable that at development time.
3.) I’ll also happily take a PR because I’m not sure what your setup is
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
@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
@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
@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