Samuel-88

Samuel-88

Not receiving HTTP responses using Telsa + Hackney

Hello all,
Hope everyone is doing all right!

I am working on an application that uses an API that does not support the keep-alive option on HTTP requests.

On average we send a couple million requests to that API every month. And about two hundred of those requests are sent, the other API receives it, and answers back very fast (~200 ms) but for some reason the answer does not arrive in our application. We are using Tesla with Hackney, and we have an internal library that actually sends the requests. The first thing we tried to do is to disable the pool of connections since the API does not handle keep alive.

Our configs are as follow in the application that uses the internal lib to do requests:

config :tesla, adapter: {Tesla.Adapter.Hackney, recv_timeout: 27_000, pool: false}
config :tesla, Module.PathToTheModule, adapter: {Tesla.Adapter.Hackney, recv_timeout: 27_000, pool: false}

And in the internal lib that actually does the requests:

config :tesla, adapter: {Tesla.Adapter.Hackney, recv_timeout: 27_000, pool: false}

The first thing that confuses me is which configuration will actually be used, the one in the original application that calls the lib that does the requests, or the actual lib that handles the requests? The Tesla client is built in the lib.

I thought about changing the HTTP client but not sure if it’s worth it. Has anyone gone through that? Does anyone have any tips?

Thanks a lot for any help,

First Post!

Eiji

Eiji

If you have config A and B and one of them overrides the other one, then the simplest way for you way to find it yourself without any help is to make a mistake in one of configuration and see if it affects your code. If not revert that change and just to be sure change second config. At least one of those changes should fail.

# Hackney -> HackHey
config :tesla, adapter: {Tesla.Adapter.HackHey, recv_timeout: 27_000, pool: false}

You should have an error that a module or it’s function is not available and that the module is not loaded.

I don’t know if it’s worth it … Depends on how you see it … :sunglasses:

  1. If that’s the only problem and you are able to fix it then I do not see a need to do that other than a bigger code refactor :no_entry_sign:
  2. If you plan code refactor anyway then why not giving a try other hex dependency? :see_no_evil:
  3. Salary you can offer me :joy:

More or less seriously, but the general rule is that you should be the only person to make decisions for you. Nobody who only give you “empty advice” would take responsibility for what you do. This applies not only to programming, but any topic around investing (time, money, resources etc.).

Depends on what you ask … Many developers made a code refactor at least once and with good library API it should be enough simple to not even touch tests and the rest of code. If you mean an edge-case with a custom server not supporting any commonly supported HTTP header then I guess that most people may at most heard about such case, but never had a chance to work on it.

The simplest way is to show some example code, but I guess that may take some time for some cases. You can always ask somebody for help and invite him to project. As a senior Elixir developer I’m helping with creating issues and pull requests in last 7 years:

Recently in May I have even done a major code refactor for a public repository:

Here is my GitHub profile:

Where Next?

Popular in Questions Top

stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
logicmason
Hi there, I'm working through my first release with elixir/phoenix. I've built a release with distillery and found that it crashes when I...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
gonzofish
I’m currently trying to understand how to join three tables using Ecto. All the examples I’ve seen use 2, so maybe I’m just missing somet...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
idi527
I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir iex(2)...
New

Other popular topics Top

belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
yurko
Here are few pieces of (common) Linux knowledge that we use for reasonably small one server apps. We use Ubuntu but this should work for ...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
New
dokuzbir
Hello, I am trying to convert my lists to string without losing brackets.For start i have 3 map. They look like these buyer = %{ id: ...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
Nvim
Elixir appears to be a superior language to Python. I don’t see any advantage of Python over Elixir. Are there any?
New

We're in Beta

About us Mission Statement